小编典典

Oracle SQL获取第n个元素正则表达式

sql

我正在尝试在Oracle中使用SQL获取逗号分隔的字符串中的第n个元素。

到目前为止,我有以下内容。

SELECT regexp_substr(
   '100016154,5101884LT00001,,,,,100000010892100000012655,L,SEI,5101884LT00001,1,SL,3595.03,00,2,N,N,G,N',
   '[^,]+',
   1,
   7)
FROM dual;

但是当元素为空时它不起作用,即,任何人都可以帮忙吗?


阅读 264

收藏
2021-03-23

共1个答案

小编典典

如果定界的值在逗号之间始终是字母数字,那么您可以尝试:

SELECT REGEXP_SUBSTR( <delimied_string>, '[[:alnum:]]{0,},', 1, 7 )
  FROM dual;

获取第七个值(包括结尾的逗号)。如果为空,则只需输入逗号(可以轻松删除)。

显然,如果您想要的值不是第七个,则将第四个参数值更改为想要的第n个出现率,例如

SELECT REGEXP_SUBSTR( <delimied_string>, '[[:alnum:]]{0,},', 1, <nth occurance> )
  FROM dual;

编辑:因为我喜欢REGEX,这是一个解决方案,它也删除了结尾的逗号

SELECT REPLACE(
          REGEXP_SUBSTR(<delimied_string>, '[[:alnum:]]{0,},', 1, <nth>), 
          ','
       )
  FROM dual;

希望能帮助到你

2021-03-23