优化SQL Server子字符串提取:简化Trim字段提取方案咨询
针对SQL Server提取倒数第二个反斜杠与最后一个反斜杠间字段的简洁方案
方案1:使用STRING_SPLIT(SQL Server 2016及以上版本)
若你的SQL Server版本支持STRING_SPLIT,可将字符串按反斜杠拆分后直接取倒数第二个元素:
SELECT (SELECT value FROM STRING_SPLIT(CAR_DESC, '\') ORDER BY (SELECT NULL) OFFSET (SELECT COUNT(*) - 2 FROM STRING_SPLIT(CAR_DESC, '\')) ROWS FETCH NEXT 1 ROW ONLY) AS TEST1 FROM TABLEA
注:SQL Server兼容级别130及以上时,STRING_SPLIT的拆分结果会保持原字符串的顺序。
方案2:简化REVERSE嵌套写法
你现有的逻辑可以通过子查询预计算重复值,提升可读性同时简化代码:
SELECT REVERSE(SUBSTRING(rev_str, first_slash + 1, second_slash - first_slash - 1)) AS TEST1 FROM ( SELECT CAR_DESC, REVERSE(CAR_DESC) AS rev_str, CHARINDEX('\', REVERSE(CAR_DESC)) AS first_slash, CHARINDEX('\', REVERSE(CAR_DESC), CHARINDEX('\', REVERSE(CAR_DESC)) + 1) AS second_slash FROM TABLEA ) t
子查询提前算出反转后的字符串和两次反斜杠的位置,避免主查询中重复调用函数,逻辑更清晰。
方案3:XML解析法(兼容更早SQL Server版本)
如果你的版本低于2016,可借助XML解析实现提取:
SELECT CAST('<root><v>' + REPLACE(CAR_DESC, '\', '</v><v>') + '</v></root>' AS XML).value('(/root/v[last()-1])[1]', 'varchar(100)') AS TEST1 FROM TABLEA
将原字符串转换为XML节点结构后,直接选取倒数第二个节点的值,写法更简洁直观。
内容的提问来源于stack exchange,提问作者2020db9
相关产品推荐
相关产品推荐

