ORACLE:SQL REGEXP_SUBSTR,返回第一个分号和第二个分号之间的列值。最后一次半聚集后的其他值

ORACLE:SQL REGEXP_SUBSTR,返回第一个分号和第二个分号之间的列值。最后一次半聚集后的其他值,sql,regex,oracle,Sql,Regex,Oracle,瓦查尔:布拉:123:678 第一个半列和第二个半列之间的需要值:123 最后半列后需要值:678使用以下正则表达式: SELECT REGEXP_SUBSTR ('BLAH:123:678', ':(\d+):', 1, 1, NULL, 1) first_val, REGEXP_SUBSTR ('BLAH:123:678', '(\d+)$', 1, 1, NULL, 1) second_val FROM DUAL 输出: first_Val second_val 12

瓦查尔:布拉:123:678

第一个半列和第二个半列之间的需要值:123 最后半列后需要值:678使用以下正则表达式:

SELECT REGEXP_SUBSTR ('BLAH:123:678', ':(\d+):', 1, 1, NULL, 1) first_val,
       REGEXP_SUBSTR ('BLAH:123:678', '(\d+)$', 1, 1, NULL, 1) second_val
  FROM DUAL
输出:

first_Val  second_val
123        678

假设您总是有两个“
”:“
,这是一个没有regexp的解决方案,乍一看可能不那么优雅,但比regexp更快:

SELECT SUBSTR(
              yourString,
                INSTR(yourString, ':') + 1,
                INSTR(yourString,':', 1, 2 )
                  - INSTR(yourString, ':') - 1
             ),
       SUBSTR(
              yourString,
              INSTR(yourString, ':', 1, 2) +1
             )
  FROM (SELECT 'BLAH:123:678' AS yourString FROM DUAL)

你试过INSTR吗?,从反面往右转INSTR,从左边往右转INSTR,如果你不想纵向编码,你试过什么?有一些很好的帖子和这篇很相似。