2012-07-09 50 views
0

該字符串包含許多由空格分隔的單詞,例如,分隔字符串並檢索。使用空格

employee_first_nm = "John Walker" 

我想單獨檢索第一部分(「John」)。這部分我已經完成了使用以下代碼:

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

在某些情況下,字符串只有一個單詞,例如「索尼婭」,這是我遇到問題的地方。這裏如果只有一個字,函數根本不會檢索任何值。但是我希望它能在這種情況下得到完整的字符串,即「sonia」。

請幫

+6

什麼RDBMS? SQL Server? MySQL的?還有別的嗎? – LittleBobbyTables 2012-07-09 14:09:35

+0

如果你真的在使用名稱而不僅僅是作爲例子,你需要閱讀「[Falsehoods Programmers Believe About Names](http://www.kalzumeus.com/2010/06/17/falsehoods-programmers -believe-about-names /)「來幫助避免大量問題。 – 2012-07-31 20:27:59

回答

4

只要保證總是有是一個空間;

... INSTR(employee_first_nm + ' ', ' ') 

如果已經存在的字符串,然後餡上月底另一個在空間沒有區別爲第1人會發現,如果沒有生存空間添加一個讓你的邏輯工作。

(通常還需要INSTR(..)-1剝離後間隔)

+0

可愛的把戲。我喜歡。 – 2012-07-09 14:12:00

+0

+1 - 尼斯詭計 – Lamak 2012-07-09 14:12:12

-1

你可以試試:

SUBSTRING(select employee_first_nm,0, charindex(' ',employee_first_nm) 

測試了:

select substring('John walker',0, charindex(' ','John walker more')) 

回報 - > '約翰'

+0

-1 - 操作已經做到了這一點(使用Oracle功能,而不是charindex),問題是當沒有空間 – Lamak 2012-07-09 14:17:24

0

或者,您可以檢查INSTR是否返回正確的值:

(case when INSTR(employee_first_nm, ' ') > 0 
     then SUBSTR(employee_first_nm, 1, INSTR(employee_first_nm, ' ')) 
     else employee_first_nm 
end) 
1
SUBSTR(employee_first_nm, 1, INSTR(CONCAT(employee_first_nm,' '), ' ')); 
0

爲什麼不在這裏利用正則表達式的力量。

REGEXP_SUBSTR(employee_first_nm, '^[a-zA-Z]*\s?') 

這應該返回你想要的子串。

相關問題