SQL Server技术问询:如何提取下划线第二次出现后的字段值
获取SQL Server中字符串第二个下划线之后的内容
你的问题核心是要定位到第二个下划线的位置,然后从它的下一个字符开始截取字符串。你之前用的语句只找到了第一个下划线的位置,所以得到的结果不符合预期。
解决方案
我们可以嵌套使用CHARINDEX函数来定位第二个下划线的位置,再结合SUBSTRING完成截取:
SELECT SUBSTRING( name, CHARINDEX('_', name, CHARINDEX('_', name) + 1) + 1, LEN(name) ) AS Name FROM product_details;
代码解释
CHARINDEX('_', name):找到字符串中第一个下划线的位置CHARINDEX('_', name, CHARINDEX('_', name) + 1):从第一个下划线的下一个字符开始查找,得到第二个下划线的位置SUBSTRING(..., 第二个下划线位置 + 1, LEN(name)):从第二个下划线的下一个字符开始,截取到字符串末尾
测试结果
用你的测试数据执行上面的语句,会得到完全符合期望的输出:
| Name |
|---|
| pen |
| pen_two |
| ted_ted_pen |
| te_de_rd_te |
处理边界情况(可选)
如果你的表中存在下划线数量少于2个的字符串,上面的语句会返回NULL。如果想要这种情况返回原字符串,可以用CASE语句处理:
SELECT CASE WHEN LEN(name) - LEN(REPLACE(name, '_', '')) >= 2 THEN SUBSTRING( name, CHARINDEX('_', name, CHARINDEX('_', name) + 1) + 1, LEN(name) ) ELSE name END AS Name FROM product_details;
内容的提问来源于stack exchange,提问作者user3224208
相关产品推荐
相关产品推荐

