2017-06-21 54 views
0

我想分割一個字符串並獲得空格後的值。我可以在空間之前獲得該值,但是如何在空間之後獲得該字符串。空格後的子字符串

DECLARE @string varchar(20) 
SELECT @string = 'Test Name' 
SELECT SUBSTRING(@string, 0, CHARINDEX(' ', @string)) 

感謝您的幫助提前。

編輯:我使用的SQLServer 2012

+0

你總是有2件(1個空格)還是要在選定字符的每次出現處分割一個字符串?那麼多空間呢? – Pred

回答

4

這裏有一個版本使用SUBSTRINGCHARINDEX事先到SQL Server 2016時,SQL Server版本推出了STRING_SPLIT

以下任一作品:

SELECT SUBSTRING(@string, CHARINDEX(' ', @string) +1, 20) 

SELECT SUBSTRING(@string, CHARINDEX(' ', @string) +1, DATALENGTH(@string) - CHARINDEX(' ', @string) +1) 

編輯補充說明按照饒的評論

我們需要找到使用CHARINDEX(它返回一個代表了許多的空間位置但是我們想要選擇的字符串在空格後面開始,因此我們必須在我們的SUBSTRING的開始位置加1(+1),這樣開始位置就變成了CHARINDEX('',@字符串)+ 1.

SUBSTRING的第三個參數是要選擇的字符串的長度,在第一種情況下,我只是假設您指定爲varchar(20)的字符串不能超過20個字符,因此我使用了20.注意SUBSTRING將不會嘗試選擇超過字符串末尾的字符,因此指定長度超過剩餘字符數的長度是安全的。

我的第二個示例獲取字符串的長度來選擇基於它是總串(DATALENGTH)減去字符我們選擇之前數的長度(CHARINDEX + 1)

+0

謝謝你的工作。如果你不介意你能解釋它是如何工作的。 '+1'和20在第一個查詢中,也是第二個查詢。 – BRDroid

+0

@Rao查看更新的答案 –

+0

非常感謝 – BRDroid

0

不要使用字符串,而是使用string_split。這將返回一個字符串數組。

SELECT value FROM STRING_SPLIT('Lorem ipsum dolor sit amet.', ' '); 

這將返回以下陣列:

Lorem 
ipsum 
dolor 
sit 
amet. 

更多信息可以在這裏找到:https://docs.microsoft.com/en-us/sql/t-sql/functions/string-split-transact-sql

+0

感謝您的回覆,但我正在使用SQLServer 2012.我的錯我沒有在我的問題中提到過。 – BRDroid

相關問題