我有这些数据:
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
答案 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