我使用了函数regexp_substr(STR,'[^|]+',1,2)
,
它在某些情况下运行良好,但对于空场景,它给出第三个值,
1|CAT|DOG
3|HARRY|GOAT|STACK
6||LION|TIGER --this row should return null, but the above function gives me LION
预期输出:
CAT
HARRY
(null)
最佳答案
@Gary_W has written about使用正则表达式模式分割字符串的问题,正是因为它如何处理空标签。 (和is on a mission...)
该文章中的替代方法也适用于此,其中管道分隔符被转义:
with t (str) as (
select '1|CAT|DOG' from dual
union all select '3|HARRY|GOAT|STACK' from dual
union all select '6||LION|TIGER' from dual
)
select str, regexp_substr(str, '(.*?)(\||$)', 1, 2, null, 1) from t;
STR REGEXP_SUBSTR(STR,
------------------ ------------------
1|CAT|DOG CAT
3|HARRY|GOAT|STACK HARRY
6||LION|TIGER
第三个元素也类似:
select str, regexp_substr(str, '(.*?)(\||$)', 1, 3, null, 1) from t;
STR REGEXP_SUBSTR(STR,
------------------ ------------------
1|CAT|DOG DOG
3|HARRY|GOAT|STACK GOAT
6||LION|TIGER LION
第四个:
select str, regexp_substr(str, '(.*?)(\||$)', 1, 4, null, 1) from t;
STR REGEXP_SUBSTR(STR,
------------------ ------------------
1|CAT|DOG
3|HARRY|GOAT|STACK STACK
6||LION|TIGER TIGER
关于sql - ORACLE - regexp_substr 返回空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45707897/