【问题标题】:Obtain substring only by name in Oracle在 Oracle 中仅按名称获取子字符串
【发布时间】:2016-12-01 16:18:23
【问题描述】:

我有这个数据:

FlujodeTrabajoGrado22 SONIA XIMENA PARRA ARDILA U00053542
FlujodeTrabajoGrado22 ANDRES BECERRA DUARTE 1098456123

等等

我使用这个选择:

SELECT SUBSTR('FlujodeTrabajoGrado22 SONIA XIMENA PARRA ARDILA U00053542',
               INSTR('FlujodeTrabajoGrado22 SONIA XIMENA PARRA ARDILA U00053542',
                     ' ',1)
              ) 
 FROM DUAL  

但我得到了这个:

SONIA XIMENA PARRA ARDILA U00053542

结果必须是:

SONIA XIMENA PARRA ARDILA

ANDRES BECERRA DUARTE

【问题讨论】:

  • 从您发布的输入和查询中,您没有获得所显示的内容。子字符串也将包括前导空格!

标签: oracle substring


【解决方案1】:

您可以使用Regular Expressions:

SELECT regexp_replace('FlujodeTrabajoGrado22 SONIA XIMENA PARRA ARDILA U00053542',
'^[^ ]+ (.*) [^ ]+$',
'\1') 
 FROM DUAL;

使用正则表达式模式^\w+ +(.*) +\w+$,以防您不确定有多少空格(或制表符)字符将单词分隔为:

SELECT regexp_replace('FlujodeTrabajoGrado22 SONIA XIMENA PARRA ARDILA U00053542',
'^\w+ +(.*) +\w+$',
'\1') 
 FROM DUAL;

【讨论】:

    【解决方案2】:

    你还需要删除句尾

    如果你想要一个只有 substr 的方法,你可以使用

      SELECT SUBSTR('FlujodeTrabajoGrado22 SONIA XIMENA PARRA ARDILA U00053542', 
          INSTR('FlujodeTrabajoGrado22 SONIA XIMENA PARRA ARDILA U00053542',' ',-1) + 1)
      FROM dual
    

    【讨论】:

      【解决方案3】:

      类似的东西。第一个instr()找到第一个空格的位置,我们加1表示我们需要检索的子串的第一个位置。然后第二个 instr() 和第三个参数 -1 找到从字符串的 end 开始计数的“第一次”出现的空格(减号表示那个),我们在用于指示所需子字符串的长度的算术计算。

      这假设您要检索第一个和最后一个空格字符之间的所有内容(不包括它们)。

      with
           input_strings ( str ) as (
             select 'FlujodeTrabajoGrado22 SONIA XIMENA PARRA ARDILA U00053542' from dual 
             union all
             select 'FlujodeTrabajoGrado22 ANDRES BECERRA DUARTE 1098456123'    from dual
           )
      -- end of test data; solution (actual SQL query) begins below this line
      select substr(str, instr(str, ' ')+1, instr(str, ' ', -1)-instr(str, ' ')-1) as names
      from   input_strings
      ;
      
      NAMES
      -------------------------
      SONIA XIMENA PARRA ARDILA
      ANDRES BECERRA DUARTE
      

      【讨论】:

        猜你喜欢
        • 2016-03-05
        • 2022-12-15
        • 2014-03-06
        • 1970-01-01
        • 2015-12-29
        • 1970-01-01
        • 1970-01-01
        • 2013-01-15
        • 2020-01-03
        相关资源
        最近更新 更多