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

标签 sql regex oracle denormalized

我正在尝试使用 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;

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

最佳答案

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

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;

希望能帮助到你

关于sql - Oracle SQL 获取第 n 个元素正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7363000/

相关文章:

php - mySQL 中 FOUND_ROWS() 的错误结果

sql - 使用 sql 参数插入/更新 TBlobfield(又名图像)

MySQL相同的最大值,不同的实例

regex - 正则表达式,检查出现的范围

regex - 具有前瞻性的 R 正则表达式中的贪婪

java - Oracle 10g 中使用哪种数据类型来存储 DateTime?

mysql - 再次出现行时间差异

python - 如何用希伯来语搜索正则表达式 (Python 2.7)

sql - 具有最大条件的 select 子句

sql - 相当于 MySQL 的 DESCRIBE [表] 的 Oracle 和/或 SQL Server?