SQL Server查询从字符串

时间:2016-01-21 01:50:29

标签: sql sql-server

在SO标签中已经有了这个问题的答案。所以我决定让你的生活更轻松,并为SQL Server用户提供以下答案。总是乐于看到不同的答案,或许有更好的表现。

快乐的编码!

6 个答案:

答案 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]

enter image description here

答案 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想要的单词。

就我而言,我正在使用UNIONSELECT语句构建动态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)