32人参与 • 2026-09-10 • Oracle
在日常数据库设计中,为了简化字段结构,
我们有时会将多选项值(如复选框结果)以逗号分隔的字符串形式存储。
例如:
czjg 字段值:'01,03,05'
这些代码代表不同的含义(如处理结果项),我们在展示或查询时,往往需要将其转换成对应的名称列表。
将逗号分隔的代码字段
(如 "01,03")转换为对应的名称(如 "合格,不合格")。
使用 listagg + 子查询 + like 模糊匹配的方式进行实现:
select
pkid,
(
select
listagg(b.mc, ',') within group (order by b.dm)
from
zhxg_xtgl_dmk_cl b
where
b.dmbz = 'xlzx_zdgzxs_czjg'
and (',' || t.czjg || ',') like '%,' || b.dm || ',%'
) as czjgmc
from
shxd_xlzx_zdgz_gzsf t;| 技术点 | 说明 |
|---|---|
| listagg | oracle聚合函数,用于将多行合并为一行,用分隔符连接 |
| within group | 定义聚合排序方式 |
| `(',' |
| czjg(代码) | 对应名称 |
|---|---|
| '01,03' | '合格,不合格' |
这种写法适用于逗号分隔的多值字段与码表字段之间的多对多转换展示,在报表、页面渲染时非常实用。
如果你正在开发 oracle 项目,有这类存储结构,可以直接套用以上 sql!
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论