2016-01-21 83 views

回答

7
SELECT SUBSTRING(@YourString, 1, LEN(@YourString) - CHARINDEX(' ', REVERSE(@YourString))) 

編輯:確保@YourString首先截斷,亞歷克斯M有指出:

SET @YourString = LTRIM(RTRIM(@YourString)) 
+2

這不僅僅是取代最後一個單詞的所有實例嗎?你最好採取這個想法,並改進它像'SUBSTRING(字符串,1,LEN(字符串) - charindex('',REVERSE(字符串))' – ZLK

2
DECLARE @Sentence VARCHAR(MAX) = 'Hi This is Pavan Kumar' 

SELECT SUBSTRING(@Sentence, 1, CHARINDEX(' ', @Sentence) - 1) AS [First Word], 
     REVERSE(SUBSTRING(REVERSE(@Sentence), 1, 
       CHARINDEX(' ', REVERSE(@Sentence)) - 1)) AS [Last Word] 

enter image description here

1
DECLARE @String VARCHAR(MAX) = 'One two three four' 

SELECT LEFT(@String,LEN(@String)-CHARINDEX(' ', REVERSE(@String),0)+1) 
2

只是一個除了答案。

在MSSQL爲LEN功能的文檔:

LEN不包括尾隨空白。如果這是一個問題,請考慮使用不修剪字符串的DATALENGTH(Transact-SQL)函數。如果處理一個unicode字符串,DATALENGTH將返回兩倍的字符數。

這裏的答案的問題是尾部空格不佔。

SELECT SUBSTRING(@YourString, 1, LEN(@YourString) - CHARINDEX(' ', REVERSE(@YourString))) 

作爲一個例子爲接受的答案(以上爲基準),這將有錯誤的結果幾個輸入:

 
    INPUT  -> RESULT 
    'abcd '  -> 'abc'  --last symbol removed 
    'abcd 123 ' -> 'abcd 12' --only removed only last character 

爲了說明上述情況下人們可能需要修剪串(將返回的最後一個字出來的一語中的2分或更多的話):

SELECT SUBSTRING(RTRIM(@YourString), 1, LEN(@YourString) - CHARINDEX(' ', REVERSE(RTRIM(LTRIM(@YourString))))) 

相反的兩側修剪,也就是佔主導以及尾部的空格。

或者,也可以修剪輸入本身。

+1

我正在編輯接受的答案謝謝你指出這一點。 –

+1

不應該LEN(名稱)是LEN(@YourString)? –

相關問題