SQL 提取字符串中最后一个单词的语句?
SQL statement to extract the last word in a string?
I 运行 SELECT 语句在 SQL Server 2016 中使用 CHARINDEX 到 return 字符串中的最后一个单词,使用 space 作为定界符。它适用于某些领域和其他领域,它会删除一些字符。有人可以给我指出正确的方向吗?
我已经尝试了 RIGHT、LEFT 和 REVERSE 内置函数以及 SUBSTRING 函数。
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))
我期待最后一个词 - Xxxxxxxxxx 但是对于这个特定的记录,上面的查询 returns xxxxxxx 并忽略了前面的 3 个字符。对于其他一些记录,它有效并且 returns 甚至最多 8 个字符。如果指出正确的方向,我将不胜感激。
见下面的代码。思路是:
- 反转字符串。
- 反转后找到第一个space
- 获取 space
左侧的所有内容
- 再次反转它,因为字符串被反转了。
我不是直接给你答案,而是把它分解了,这样你可以更好地理解它
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,
'')
如果字符串没有空格,此公式也适用。
I 运行 SELECT 语句在 SQL Server 2016 中使用 CHARINDEX 到 return 字符串中的最后一个单词,使用 space 作为定界符。它适用于某些领域和其他领域,它会删除一些字符。有人可以给我指出正确的方向吗?
我已经尝试了 RIGHT、LEFT 和 REVERSE 内置函数以及 SUBSTRING 函数。
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))
我期待最后一个词 - Xxxxxxxxxx 但是对于这个特定的记录,上面的查询 returns xxxxxxx 并忽略了前面的 3 个字符。对于其他一些记录,它有效并且 returns 甚至最多 8 个字符。如果指出正确的方向,我将不胜感激。
见下面的代码。思路是:
- 反转字符串。
- 反转后找到第一个space
- 获取 space 左侧的所有内容
- 再次反转它,因为字符串被反转了。
我不是直接给你答案,而是把它分解了,这样你可以更好地理解它
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,
'')
如果字符串没有空格,此公式也适用。