分离字符串和检索。使用空格

时间:2012-07-09 14:04:50

标签: sql

该字符串包含许多以空格分隔的单词,例如

employee_first_nm = "John Walker"

我想单独检索第一部分(“John”)。这部分我使用以下代码完成:

SUBSTR(employee_first_nm, 1, INSTR(employee_first_nm, ' '));

在某些情况下,字符串只有一个字,例如“sonia”,这是我遇到问题的地方。这里如果只有一个单词,则该函数根本不会检索任何值。但我希望它在这种情况下得到完整的字符串,即“sonia”。

请帮忙

5 个答案:

答案 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'))

返回 - > '约翰'