该字符串包含许多以空格分隔的单词,例如
employee_first_nm = "John Walker"
我想单独检索第一部分(“John”)。这部分我使用以下代码完成:
SUBSTR(employee_first_nm, 1, INSTR(employee_first_nm, ' '));
在某些情况下,字符串只有一个字,例如“sonia”,这是我遇到问题的地方。这里如果只有一个单词,则该函数根本不会检索任何值。但我希望它在这种情况下得到完整的字符串,即“sonia”。
请帮忙
答案 0 :(得分:4)
只需确保将作为空格;
... INSTR(employee_first_nm + ' ', ' ')
如果字符串中已经有空格,那么在末尾填充另一个空格没有任何区别,因为第一个将被找到,如果没有现有空格,则添加一个会使你的逻辑工作。
(通常你还需要INSTR(..)-1
去掉尾随空格)
答案 1 :(得分:1)
SUBSTR(employee_first_nm, 1, INSTR(CONCAT(employee_first_nm,' '), ' '));
答案 2 :(得分:0)
或者,您可以检查INSTR是否返回正确的值:
(case when INSTR(employee_first_nm, ' ') > 0
then SUBSTR(employee_first_nm, 1, INSTR(employee_first_nm, ' '))
else employee_first_nm
end)
答案 3 :(得分:0)
为什么不在这里利用正则表达式的力量。
REGEXP_SUBSTR(employee_first_nm, '^[a-zA-Z]*\s?')
这应该返回你想要的子串。
答案 4 :(得分:-1)
您可以尝试:
SUBSTRING(select employee_first_nm,0, charindex(' ',employee_first_nm)
经过测试:
select substring('John walker',0, charindex(' ','John walker more'))
返回 - > '约翰'