仅在Oracle中按名称获取子字符串

时间:2016-12-01 16:18:23

标签: oracle substring

我有这些数据:

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

3 个答案:

答案 0 :(得分:2)

您可以使用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;

答案 1 :(得分:0)

你还需要删除句末

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

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

答案 2 :(得分:0)

像这样的东西。第一个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