需求:数据库表中字段采用“,”分隔的长字符串,现将该字段以逗号切割转为多行。
备注:逗号可以改为其他符号,对应SQL做下简单的调整即可
ID NAME
1 TEST1,TEST2
2 TEST3,TEST4
3 TEST4,TEST5
4 TEST1,TEST4
5 TEST2,TEST4,TEST5
SELECT ID, REGEXP_SUBSTR(NAME, '[^,]+', 1, LEVEL) NAME
FROM TITLE
CONNECT BY LEVEL <= REGEXP_COUNT(NAME, '[^,]+')
AND ROWID = PRIOR ROWID
AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL
ORDER BY NAME;
ID NAME
4 TEST1
1 TEST1
1 TEST2
5 TEST2
2 TEST3
4 TEST4
2 TEST4
5 TEST4
3 TEST4
5 TEST5
3 TEST5
oracle 逗号分隔字符串列转多行数据需求:数据库表中字段采用“,”分隔的长字符串,现将该字段以逗号切割转为多行。备注:逗号可以改为其他符号,对应SQL做下简单的调整即可table数据如下ID NAME1 TEST1,TEST22 TEST3,TEST43 TEST4,TEST54 TEST1,TEST45 TEST2,TEST4,TEST5测试SQL如下:SELECT ID, REGEXP_SUBSTR(NAME, '[^,]+', 1, LEVEL
SELECT DISTINCT T.NAME,
REPLACE(REGEXP_SUBSTR(T.TESTSTR, '[^,]+', 1, LEVEL), ',', ' ') TESTSTR
FROM TEST2 T
WHERE 1 = 1
CONNECT BY LEVEL <= (LENGTH(T.TESTSTR) - LENGTH(REPLACE(T.TESTSTR, ',', '')) + 1);
-- Create table TEST2
create
近期在工作中遇到某表某字段是可扩展
数据内容,信息以
逗号分隔生成的,现需求要根据此字段
数据在其它表查询相关的内容展现出来,第一想法是切割
数据,以
逗号作为切割符,以下为总结的实现方法,以供大家参考、指教。
SELECT ID, REGEXP_SUBSTR(NAME, '[^,]+', 1, LEVEL) NAME
FROM TITLE
CONNECT BY LEVEL <= REGEXP_COUNT(NAME, '[^,]+')
oracle中如何一个逗号分隔的字符串分隔成多行?
最近开发了一个功能,为了方便查询,某个表中的某个字段存成了逗号分隔的字符串
然后,在进行表关联查询时,需要将字符串分隔成多行,
but,不记得怎么写了,之前用过的方法也忘记了。。。然后去百度搜,功夫不负有心人啊,终于查到了解决办法,于是开始写–》执行–》嗯,可以执行
就是这种方法,百度出来的大部分都是这种方法。。
我前面还有一篇文章是关于这个方法,在使用的时候多出一个引号的问题
奇怪的是,这个方法在本地、测试、演示环境都可以用,都可以正常执行,但是到了生
分割单行数据
我们需要使用REGEXP_SUBSTR和REGEXP_COUNT两个ORACLE函数
function REGEXP_SUBSTR(string, pattern, position, occurrence, modifier)
string:需要进行正则处理的字符串
pattern:进行匹配的正则表达式
position:起始位置,从第几个字符开始正则表达式匹配(默认为1)
occ...
可以使用正则表达式和CONNECT BY LEVEL语句来实现逗号分隔字符串去重。具体方法可以参考以下SQL语句:
SELECT DISTINCT REGEXP_SUBSTR('A,B,C,A,D,E,F', '[^,]+', 1, LEVEL) AS str
FROM DUAL
CONNECT BY LEVEL <= REGEXP_COUNT('A,B,C,A,D,E,F', ',') + 1;
这个语句可以将逗号分隔的字符串'A,B,C,A,D,E,F'去重后输出。