在SO标签中已经有了这个问题的答案。所以我决定让你的生活更轻松,并为SQL Server用户提供以下答案。总是乐于看到不同的答案,或许有更好的表现。
快乐的编码!
答案 0 :(得分:8)
SELECT SUBSTRING(@YourString, 1, LEN(@YourString) - CHARINDEX(' ', REVERSE(@YourString)))
编辑:确保首先修剪@YourString
,因为Alex M指出:
SET @YourString = LTRIM(RTRIM(@YourString))
答案 1 :(得分: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]
答案 2 :(得分: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)))))
反面在两边修剪,即考虑前导和尾随空格。
或者,只需修剪输入本身。
答案 3 :(得分:1)
DECLARE @String VARCHAR(MAX) = 'One two three four'
SELECT LEFT(@String,LEN(@String)-CHARINDEX(' ', REVERSE(@String),0)+1)
答案 4 :(得分:0)
到目前为止,所有答案实际上都是关于删除字符,而不是OP想要的单词。
就我而言,我正在使用UNION
和SELECT
语句构建动态SQL语句,并希望删除最后一个UNION
:
DECLARE @sql NVARCHAR(MAX) = ''
/* populate @sql with something like this:
SELECT 1 FROM dbo.T1 WHERE condition
UNION
SELECT 1 FROM dbo.T2 WHERE condition
UNION
SELECT 1 FROM dbo.T3 WHERE condition
UNION
SELECT 1 FROM dbo.T4 WHERE condition
UNION
*/
-- remove the last UNION
SET @sql = SUBSTRING(@sql, 1, LEN(@sql) - PATINDEX(REVERSE('%UNION%'), REVERSE(@sql)) - LEN('UNION'))
答案 5 :(得分:-1)
DECLARE @String VARCHAR(MAX)='一二三四'
SELECT LEFT(@ String,LEN(@String)-CHARINDEX('',REVERSE(@String),0)+1)