SQL Server中如何提取字符串的倒数第二个单词?
提取SQL Server字符串中的倒数第二个单词
可以通过嵌套使用REVERSE、CHARINDEX和SUBSTRING函数实现需求,核心思路是先定位到字符串的最后两个单词,再从中分离出倒数第二个单词。
分步实现代码(可读性更强)
Declare @text as varchar(60) Set @text = 'Next Generation Customer Service' -- 1. 反转字符串,定位第一个空格(对应原字符串最后一个单词的起始位置) DECLARE @reversedText VARCHAR(60) = REVERSE(@text) DECLARE @firstSpacePos INT = CHARINDEX(' ', @reversedText) -- 2. 截取反转后第一个空格之后的部分,得到原字符串倒数两个单词的反转结果 DECLARE @lastTwoWordsReversed VARCHAR(60) = SUBSTRING(@reversedText, @firstSpacePos + 1, LEN(@reversedText)) -- 3. 再次反转得到原顺序的倒数两个单词,定位其中最后一个空格 DECLARE @lastTwoWords VARCHAR(60) = REVERSE(@lastTwoWordsReversed) DECLARE @lastSpacePos INT = CHARINDEX(' ', REVERSE(@lastTwoWords)) -- 4. 截取空格前的内容,即为倒数第二个单词 DECLARE @secondLastWord VARCHAR(60) = SUBSTRING(@lastTwoWords, 1, LEN(@lastTwoWords) - @lastSpacePos) SELECT @secondLastWord AS SecondLastWord
简洁版代码(合并为单查询)
Declare @text as varchar(60) Set @text = 'Next Generation Customer Service' SELECT SUBSTRING( REVERSE(SUBSTRING(REVERSE(@text), CHARINDEX(' ', REVERSE(@text)) + 1, LEN(@text))), 1, CHARINDEX(' ', REVERSE(SUBSTRING(REVERSE(@text), CHARINDEX(' ', REVERSE(@text)) + 1, LEN(@text)))) - 1 ) AS SecondLastWord
说明
- 该方法假设字符串使用单个空格作为单词分隔符,且字符串至少包含两个单词。
- 若需要支持连续多空格的场景,可先通过
REPLACE函数将连续空格替换为单个空格,再执行上述逻辑。
内容的提问来源于stack exchange,提问作者K Nina
相关产品推荐
相关产品推荐

