如何用SELECT语句实现下面的逻辑? 有一个字符串,例如:a,ab,abc,e。 我想用一条SELECT语句,显示出下面的结果: a ab abc e 请问下,该如何实现?谢谢了! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你要的结果,是要在一个Column里面显示,还是显示分别不同的行。 --参考with tb as(select '11;22;3323;abc;ddd' id from dual)selectsubstr(';'||id||';',instr(';'||id||';',';',1,rownum)+1, instr(';'||id||';',';',1,rownum+1)-instr(';'||id||';',';',1,rownum)-1) newid,instr(';'||id||';',';',1,rownum)col1, --';'rownum次出现的位置instr(';'||id||';',';',1,rownum+1)col2, --';'rownum+1次出现的位置instr(';'||id||';',';',1,rownum+1)-instr(';'||id||';',';',1,rownum) col3 --要截取的长度from tbconnect by rownum <= length(';'||id||';') - length(replace(';'||id||';', ';', ''))-1 with t as(select ',a,ab,abc,e,' str from dual)select substr(str, instr(str, ',', 1, rn) + 1, instr(str, ',', 1, rn + 1) - instr(str, ',', 1, rn) - 1) from t, (select rownum rn from (select length(str) - length(replace(str, ',', '')) - 1 l from t) whrere connect by rownum < l) t1aababce --二楼的不错,更简洁高效with t as(select ',a,ab,abc,e,' str from dual)select substr(str, instr(str, ',', 1, rownum) + 1, instr(str, ',', 1, rownum + 1) - instr(str, ',', 1, rownum) - 1) from t connect by rownum<length(str) - length(replace(str, ',', '')) - 1aababce OCI BLOB批量操作 如何把两条记录合并生成一条 急急急!!!!!在线等!.net平台C#开发,数据库为Oracle 10g,程序操作成功,却不定时总报各种各样的错误。 存储过程问题 求SQL语句一条 数据导入后,重启报错ORA-01599?请问各位高手怎样解决? 到底ORACLE的Variable Size是怎么计算得到的。 求助!!!忘了控制台密码,还有救吗? 请教存储过程和触发器的问题!多谢 Oracle从AIX迁移到Linux方案请教 oracle 实现一个查询语句(合并时间段有交叉重复) Oracle 拆分记录
--参考
with tb as(
select '11;22;3323;abc;ddd' id from dual)
select
substr(';'||id||';',instr(';'||id||';',';',1,rownum)+1,
instr(';'||id||';',';',1,rownum+1)-instr(';'||id||';',';',1,rownum)-1) newid,
instr(';'||id||';',';',1,rownum)col1, --';'rownum次出现的位置
instr(';'||id||';',';',1,rownum+1)col2, --';'rownum+1次出现的位置
instr(';'||id||';',';',1,rownum+1)-instr(';'||id||';',';',1,rownum) col3 --要截取的长度
from tb
connect by rownum <= length(';'||id||';')
- length(replace(';'||id||';', ';', ''))-1
with t as(
select ',a,ab,abc,e,' str from dual
)
select substr(str,
instr(str, ',', 1, rn) + 1,
instr(str, ',', 1, rn + 1) - instr(str, ',', 1, rn) - 1)
from t,
(select rownum rn
from (select length(str) - length(replace(str, ',', '')) - 1 l
from t) whrere
connect by rownum < l) t1a
ab
abc
e
--二楼的不错,更简洁高效with t as(
select ',a,ab,abc,e,' str from dual
)
select substr(str,
instr(str, ',', 1, rownum) + 1,
instr(str, ',', 1, rownum + 1) - instr(str, ',', 1, rownum) - 1)
from t connect by rownum<length(str) - length(replace(str, ',', '')) - 1
a
ab
abc
e