求助:如何在MSSQL中提取字符串的中间部分
提取MSSQL字符串中间分隔部分的解决方案
没问题,我来帮你搞定这个字符串提取的需求!你的字符串是用|分隔的三部分,要提取中间的第二部分对吧?下面给你两种实用的方法,适配不同版本的SQL Server:
方法1:兼容所有SQL Server版本(用CHARINDEX + SUBSTRING)
这种方法不依赖高版本特性,适合所有环境。核心思路是先定位两个|的位置,再截取它们之间的内容:
SELECT SUBSTRING( YourColumn, CHARINDEX('|', YourColumn) + 1, CHARINDEX('|', YourColumn, CHARINDEX('|', YourColumn) + 1) - CHARINDEX('|', YourColumn) - 1 ) AS MiddlePart FROM YourTable;
代码说明:
CHARINDEX('|', YourColumn):找到第一个|的位置CHARINDEX('|', YourColumn, CHARINDEX('|', YourColumn) + 1):从第一个|的下一位开始搜索,得到第二个|的位置SUBSTRING的第二个参数是截取起始点(第一个|的位置+1),第三个参数是截取长度(第二个|位置减去第一个|位置再减1)
方法2:SQL Server 2016及以上版本(用STRING_SPLIT)
如果你的SQL Server版本在2016或更高,可以用更简洁的拆分函数来实现:
-- SQL Server 2022及以上版本直接用ordinal列 SELECT value AS MiddlePart FROM YourTable CROSS APPLY STRING_SPLIT(YourColumn, '|') WHERE ordinal = 2;
如果是2016-2019版本(不支持ordinal列),可以用行号来筛选第二部分:
SELECT MiddlePart FROM ( SELECT value AS MiddlePart, ROW_NUMBER() OVER (PARTITION BY YourColumn ORDER BY (SELECT NULL)) AS rn FROM YourTable CROSS APPLY STRING_SPLIT(YourColumn, '|') ) t WHERE rn = 2;
测试验证
拿你提供的示例字符串x0gdfg992|x05gjy652|t0kk2:-测试,两种方法都会准确返回x05gjy652,完全满足需求,而且不需要修改任何原始数据。
内容的提问来源于stack exchange,提问作者Tester
相关产品推荐
相关产品推荐

