SQL Server 2008中如何截取字符串第一个下划线后的内容
解决SQL Server 2008中动态截取第一个下划线后内容的问题
嘿,这问题太常见了!你之前用固定截取前3个字符的方式,只能适配前缀长度一致的情况,现在要搞定不同长度的前缀,核心就是动态定位第一个下划线的位置,而不是硬编码长度。
正确的SQL语句
SELECT SUBSTRING(DocID, CHARINDEX('_', DocID), LEN(DocID)) AS NewDocID FROM YourTableName; -- 记得替换成你的实际表名
语句拆解解释
CHARINDEX('_', DocID):这个函数会返回字符串里第一个下划线_的位置索引。比如FOO_1_23_456里第一个下划线在第4位,FOO1_1_23_4567里则在第5位,完全自动适配不同前缀。SUBSTRING(DocID, 起始位置, 长度):从指定的起始位置开始截取字符串,这里第三个参数用LEN(DocID)是因为我们要一直截取到字符串结尾,不管剩下的内容有多长。
测试验证
- 输入
FOO_1_23_456→ 输出_1_23_456 - 输入
FOO1_1_23_4567→ 输出_1_23_4567
额外优化(处理无下划线的异常情况)
如果你的数据里存在没有下划线的DocID,可以加个CASE语句避免返回空值:
SELECT CASE WHEN CHARINDEX('_', DocID) > 0 THEN SUBSTRING(DocID, CHARINDEX('_', DocID), LEN(DocID)) ELSE DocID -- 没有下划线时返回原字符串,也可以改成你需要的默认值 END AS NewDocID FROM YourTableName;
这样不管前缀是3个字符还是4个字符,都能准确拿到第一个下划线之后的所有内容啦!
内容的提问来源于stack exchange,提问作者CastilloCaleb
相关产品推荐
相关产品推荐

