求解一个SQL解析字符串的问题
时间:2011-11-01
来源:互联网
一张表TABLE1
ID work_no name
----------------------
1 1000 张三
2 1001 李四
3 1002 王五
另一张表TABLE2
ID WORK_NO
--------------
1 1000,1001
2 1000,1002
3 1001,1002
查询TABLE2的时候希望得到如下结果
1 1000,1001 张三,李四
2 1000,1002 张三,王五
3 1001,1002 李四,王五
想写一个函数来解析TABLE2中的WORK_NO,不知道如何写,请哪位高手指点一下,谢谢
作者: a_king 发布时间: 2011-11-01
作者: woaikuihua 发布时间: 2011-11-01
with table1 as
(select 1 id,'1000' work_no ,'张三' name from dual union all
select 2 id,'1001' work_no ,'李四' name from dual union all
select 3 id,'1002' work_no ,'王五' name from dual
),
table2 as
(select 1 id,'1000,1001' work_no from dual union all
select 2 id,'1000,1002' work_no from dual union all
select 3 id,'1001,1002' work_no from dual
)
select a.*
,b.name||','||c.name
from table2 a
left join table1 b on regexp_substr(a.work_no,'[^\,]+',1,1)=b.work_no
left join table1 c on regexp_substr(a.work_no,'[^\,]+',1,2)=c.work_no
;
ID WORK_NO B.NAME||','||C.NAME
---------- --------- -------------------
1 1000,1001 张三,李四
3 1001,1002 李四,王五
2 1000,1002 张三,王五
作者: canhui87 发布时间: 2011-11-01
REGEXP_SUBSTR (
'first,second,third',
'[^,]*',
NVL (REGEXP_INSTR ('first,second,third',
',',
1,
DECODE (LEVEL - 1, 0, NULL, LEVEL - 1)), 0)
+ 1
)
split_result
FROM DUAL
CONNECT BY NVL (REGEXP_INSTR ('first,second,third',
',',
1,
DECODE (LEVEL - 1, 0, NULL, LEVEL - 1)), 1) >
0
作者: tx2730 发布时间: 2011-11-02
作者: LuiseRADL 发布时间: 2011-11-02
select table2.id,table2.work_no,wm_concat(table1.name) from table2 left join table1 on instr(table2.work_no,table1.work_no) > 0 group by table2.id,table2.work_no
作者: xiaobn_cn 发布时间: 2011-11-02
SQL code
select table2.id,table2.work_no,wm_concat(table1.name)
from table2
left join table1
on instr(table2.work_no,table1.work_no) > 0
group by table2.id,table2.work_no
借用下SQL,这样比较严谨
SQL code
select table2.id,table2.work_no,wm_concat(table1.name) from table2 left join table1 on instr(','||table2.work_no||',',','||table1.work_no||',') > 0 group by table2.id,table2.work_no
作者: tx2730 发布时间: 2011-11-02
作者: tx2730 发布时间: 2011-11-02
考虑一下这种情况
100 张三
1000 李四
1001 王五
有一条记录 1000,1001 ,进行关联后 【100 张三】 这条数据也会关联上了,bug啊
作者: coolkisses 发布时间: 2011-11-02
用 instr 不太合适
考虑一下这种情况
100 张三
1000 李四
1001 王五
有一条记录 1000,1001 ,进行关联后 【100 张三】 这条数据也会关联上了,bug啊
直接用确实不合适,但是两头都加上','就可以比了,六楼给出了用法
作者: tx2730 发布时间: 2011-11-02
用 instr 不太合适
考虑一下这种情况
100 张三
1000 李四
1001 王五
有一条记录 1000,1001 ,进行关联后 【100 张三】 这条数据也会关联上了,bug啊
带上分隔符做instr就可以了,这个问题6楼已经解决了。
作者: xiaobn_cn 发布时间: 2011-11-02
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28