SQL Server中如何截取最后一个指定分隔符前的字符串?
SQL Server提取最后一个'-'分隔符前的字符串
通用解决方案(兼容所有SQL Server版本)
最简洁高效的方式是结合REVERSE和CHARINDEX函数,通过反转字符串定位最后一个'-'的位置,再截取目标内容:
SELECT YourColumn, -- 处理无分隔符的情况,避免返回空值 CASE WHEN CHARINDEX('-', YourColumn) = 0 THEN YourColumn ELSE SUBSTRING(YourColumn, 1, LEN(YourColumn) - CHARINDEX('-', REVERSE(YourColumn))) END AS Result FROM YourTable
逻辑说明:
REVERSE(YourColumn):将原字符串反转,比如123-21-30变为03-12-321CHARINDEX('-', REVERSE(YourColumn)):找到反转后第一个'-'的位置,对应原字符串最后一个'-'的位置LEN(YourColumn) - 上述位置:计算原字符串中需要截取的长度SUBSTRING:从开头截取对应长度的内容,得到最后一个'-'之前的字符串
针对SQL Server 2016+的备选方案
如果使用2016及以上版本,也可以通过拆分字符串后重新拼接(需保证拆分顺序):
SELECT YourColumn, STRING_AGG(value, '-') WITHIN GROUP (ORDER BY seq) AS Result FROM YourTable CROSS APPLY ( SELECT value, ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS seq FROM STRING_SPLIT(YourColumn, '-') ) AS splits WHERE seq < (SELECT COUNT(*) FROM STRING_SPLIT(YourColumn, '-')) GROUP BY YourColumn
验证示例
假设数据表YourTable的YourColumn字段包含以下记录:
123-21123-21-30
执行通用方案的查询后,Result列将分别返回:
123123-21
内容的提问来源于stack exchange,提问作者Adam Fiqrie Putra
相关产品推荐
相关产品推荐

