oracle sql查询字段中以“;”分割的字符串,转化成对应的,以“;”分割的文字串

sql做统计时,遇到难题,不想写存储过程来实现(因为我不会写存储过程,哈哈),网上找到灰常有用的文章,亲测有效,现摘抄下来,做个笔记,原地址:http://www.dedecms.com/knowledge/data-base/oracle/2013/0204/21403.html

以下逗号都换成“;”就OK

解决方案:
    SQL> select * from test;
    A_URS_ID
    --------------------------------------------------
    123,125
    123,124,125
    SQL> select * from test1;
    URS_ID     URS_NAME
    ---------- --------------------
    123        name1
    124        name2
    125        name3
    SQL> with split_data as (
    select key, rn, substr(str, instr(str, ',', 1, rn)+1,
    instr(str, ',', 1, rn+1) - instr(str, ',', 1, rn) - 1) str
    from (select a_urs_id key, ','||a_urs_id||',' str from test) a,
    (select rownum rn from dual connect by rownum < 10) b
    where instr(str, ',', 1, rn+1) > 0 )
    select key, substr(max(sys_connect_by_path(urs_name, ',')), 2) a_name
    from split_data a, test1 b
    where a.str = b.urs_id
    start with rn = 1
    connect by key = prior key and rn-1 = prior rn
    group by key;
    KEY                  A_NAME
    -------------------- ------------------------------------------------------------
    123,124,125          name1,name2,name3
    123,125               name1,name3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值