我正在使用REGEXP_SUBSTR()
从逗号分隔列表中返回第n个值。当所有值都存在时,这可以正常工作,但如果项目为空,则失败。这里是工作的所有值都存在,我选择1个或多个字符的第二个出现的是不是一个逗号的例子:REGEX从列表中选择第n个值,允许为空
SQL> select REGEXP_SUBSTR('1,2,3,4,5,6', '[^,]+', 1, 2) data
2 from dual;
D
-
2
但是,当第二个值是零,我真是越来越第三列表中的项目,当然这确实是第二次出现的一个或多个不是逗号的字符。不过,我需要它返回NULL作为第二个项目是空的:
SQL> select REGEXP_SUBSTR('1,,3,4,5,6', '[^,]+', 1, 2) data
2 from dual;
D
-
3
如果我改变了正则表达式来允许零个或多个字符,而不是1以上,也未能对过去空号:
SQL> select REGEXP_SUBSTR('1,,3,4,5,6', '[^,]*', 1, 4) data
2 from dual;
D
-
3
我需要允许null,但似乎无法得到正确的语法。从逻辑上讲,我需要返回第n次逗号之前的数据是否存在(并允许最后一个值)。有任何想法吗?
这是一个重复。用空值解析csv字符串是一个常见问题(例如http://stackoverflow.com/questions/25529511/oracle-regex-substr-not-honoring-null-values/25530536#25530536)。我偏向于我的解决方案(用逗号在字符串前面,让你的正则表达式模式为',[^,] *'。接下来,LTRIM匹配regexp_substr。 – 2014-09-03 16:43:14