提取字符串中最后一个单词的SQL语句?
我在SQL Server 2016中使用CHARINDEX运行SELECT语句,以使用空格作为分隔符返回字符串中的最后一个单词。它适用于某些领域,也适用于其他领域,它去掉了一些字符。有人能给我指一下正确的方向吗 我尝试了内置的RIGHT、LEFT和REVERSE函数以及SUBSTRING函数提取字符串中最后一个单词的SQL语句?,sql,sql-server,charindex,Sql,Sql Server,Charindex,我在SQL Server 2016中使用CHARINDEX运行SELECT语句,以使用空格作为分隔符返回字符串中的最后一个单词。它适用于某些领域,也适用于其他领域,它去掉了一些字符。有人能给我指一下正确的方向吗 我尝试了内置的RIGHT、LEFT和REVERSE函数以及SUBSTRING函数 SELECT TRIM(RIGHT('XXxxx Xxxxxx x Xxxxxx Xxxxx Xxxx Xxxxxx 5 - Xxxxxx - Xxxxxx Xxxxxxx Xxxxxxxxxx Xxxxx
SELECT TRIM(RIGHT('XXxxx Xxxxxx x Xxxxxx Xxxxx Xxxx Xxxxxx 5 - Xxxxxx - Xxxxxx Xxxxxxx Xxxxxxxxxx Xxxxxxxxxx',CHARINDEX(' ','XXxxx Xxxxxx x Xxxxxx Xxxxx Xxxx Xxxxxx 5 - Xxxxxx - Xxxxxx Xxxxxxx Xxxxxxxxxx Xxxxxxxxxx',0)+1))
我希望最后一个字是-xxxxxxxxx,但是对于这个特定的记录,上面的查询返回xxxxxxx并忽略前面的3个字符。对于其他一些记录,它可以工作并返回多达8个字符。如果能给我指出正确的方向,我将不胜感激。请参阅下面的代码。这个想法是:
declare @something varchar(20) = '1234 5678 192'
select @something as original
, reverse(@something) as reversed
, charindex(' ',reverse(@something)) last_space_position
, left(reverse(@something), charindex(' ',reverse(@something))) what_you_need_in_reverse
, reverse(left(reverse(@something), charindex(' ',reverse(@something)))) what_you_need
请参阅下面的代码。这个想法是:
declare @something varchar(20) = '1234 5678 192'
select @something as original
, reverse(@something) as reversed
, charindex(' ',reverse(@something)) last_space_position
, left(reverse(@something), charindex(' ',reverse(@something))) what_you_need_in_reverse
, reverse(left(reverse(@something), charindex(' ',reverse(@something)))) what_you_need
以下是一种提取值而不反转值本身的方法:
select stuff(@something,
1,
len(@something) - charindex(' ', reverse(@something) + ' ') + 1,
'')
如果字符串没有空格,此公式也有效。以下是一种提取值而不反转值本身的方法:
select stuff(@something,
1,
len(@something) - charindex(' ', reverse(@something) + ' ') + 1,
'')
如果字符串没有空格,此公式也有效