ORACLE:SQL REGEXP_SUBSTR 返回第一个分号和第二个分号之间的列值。在最后半个 clumn 之后还有其他值

Posted

技术标签:

【中文标题】ORACLE:SQL REGEXP_SUBSTR 返回第一个分号和第二个分号之间的列值。在最后半个 clumn 之后还有其他值【英文标题】:ORACLE:SQL REGEXP_SUBSTR that returns the column value between 1st semicolon and second one. Also other value after last semi clumn 【发布时间】:2017-06-07 03:13:20 【问题描述】:

varchar: BLAH:123:678

需要第一个半列和第二个半列之间的值:123 最后半列后需要值:678

【问题讨论】:

你试过INSTR吗?,instr from reverse 是从右边得到,instr 是从左边得到,如果你不想编码长度的话 你试过什么?有一些很好的帖子和这个很相似,***.com/questions/17795794/…。 【参考方案1】:

假设你总是有两个':',这是没有正则表达式的解决方案,乍一看可能不那么优雅,但比正则表达式更快:

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)

【讨论】:

【参考方案2】:

使用下面的正则表达式:

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

【讨论】:

以上是关于ORACLE:SQL REGEXP_SUBSTR 返回第一个分号和第二个分号之间的列值。在最后半个 clumn 之后还有其他值的主要内容,如果未能解决你的问题,请参考以下文章

Oracle SQL:带有 REGEXP_SUBSTR 表达式的插入查询很长(拆分字符串)

Oracle SQL 正则表达式 RegExp_SubStr End Of Line (chr(10) 在搜索文本中返回 null

ORACLE:SQL REGEXP_SUBSTR 返回第一个分号和第二个分号之间的列值。在最后半个 clumn 之后还有其他值

Oracle SQL 劈开字符串

Oracle sql 终止符筛选(+奇怪的行为)

Oracle SQL 动态子串