如何从SQL Server列提取倒数第二个空格后最多10个字符的数据?
在SQL Server中提取倒数第二个空格之后的最多10个字符
针对你给出的字符串格式,我们可以通过反转字符串定位空格位置的方式实现需求,核心思路是先找到原字符串中倒数第二个空格和最后一个空格的位置,截取两者之间的内容后限制长度为10字符。
实现代码
假设存储数据的表名为YourTable,目标列名为YourColumn,SQL语句如下:
SELECT LEFT( REVERSE( SUBSTRING( REVERSE(YourColumn), -- 跳过反转后第一个空格(对应原串最后一个空格) CHARINDEX(' ', REVERSE(YourColumn)) + 1, -- 截取反转后第一个空格到第二个空格之间的内容(对应原串倒数第二个空格到最后一个空格之间) CHARINDEX(' ', REVERSE(YourColumn), CHARINDEX(' ', REVERSE(YourColumn)) + 1) - CHARINDEX(' ', REVERSE(YourColumn)) - 1 ) ), 10 -- 限制最多取10个字符 ) AS ExtractedResult FROM YourTable;
代码说明
- 反转字符串:通过
REVERSE(YourColumn)将原字符串反转,把“找倒数第二个空格”转化为“找反转后第二个空格”,简化定位逻辑。 - 定位空格:
CHARINDEX(' ', REVERSE(YourColumn)):找到反转后第一个空格的位置,对应原字符串的最后一个空格。CHARINDEX(' ', REVERSE(YourColumn), ... + 1):从第一个空格之后开始找下一个空格,对应原字符串的倒数第二个空格。
- 截取并反转:截取反转后两个空格之间的内容,再次反转得到原顺序的目标字符串,最后用
LEFT限制长度为10。
测试验证
用你提供的测试数据执行上述SQL,会得到如下结果:
S000060803 P000035365 S000059468 P000034785 T000034785
完全匹配你的期望输出。
内容的提问来源于stack exchange,提问作者dsayalee
相关产品推荐
相关产品推荐

