sql - ORACLE - regexp_substr 返回空值

标签 sql oracle

我使用了函数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/

相关文章:

sql - 为什么 SQL 不允许我删除这个外键?

sql - 计算列sql中的重复值

Oracle - 检查空日期时出现不一致的数据类型错误

sql - 创建 View SQL总是出错

sql - 为什么要使用“选择前 100%”?

php - mysql计算两个子查询之间的百分比

oracle - Grails 2.4.5配置Oracle连接器

oracle - sqlplus 中不显示标题

MySQL - 从条目中删除子字符串

java - 使用查询更新对象外键