在SO中有一個MySQL標記已經有了這個問題的答案。所以我只是決定讓你的生活更輕鬆,併爲SQL Server用戶提供下面的答案。總是樂於看到不同的答案或許有更好的表現。SQL Server查詢從字符串中刪除最後一個單詞
快樂編碼!
在SO中有一個MySQL標記已經有了這個問題的答案。所以我只是決定讓你的生活更輕鬆,併爲SQL Server用戶提供下面的答案。總是樂於看到不同的答案或許有更好的表現。SQL Server查詢從字符串中刪除最後一個單詞
快樂編碼!
SELECT SUBSTRING(@YourString, 1, LEN(@YourString) - CHARINDEX(' ', REVERSE(@YourString)))
編輯:確保@YourString
首先截斷,亞歷克斯M有指出:
SET @YourString = LTRIM(RTRIM(@YourString))
DECLARE @String VARCHAR(MAX) = 'One two three four'
SELECT LEFT(@String,LEN(@String)-CHARINDEX(' ', REVERSE(@String),0)+1)
只是一個除了答案。
在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)))))
相反的兩側修剪,也就是佔主導以及尾部的空格。
或者,也可以修剪輸入本身。
我正在編輯接受的答案謝謝你指出這一點。 –
不應該LEN(名稱)是LEN(@YourString)? –
這不僅僅是取代最後一個單詞的所有實例嗎?你最好採取這個想法,並改進它像'SUBSTRING(字符串,1,LEN(字符串) - charindex('',REVERSE(字符串))' – ZLK