如何在SQL中结合SUBSTRING与右侧截断提取指定字符段
提取下划线间目标数据的SQL实现
针对需要从MyFld字段中提取第一个下划线后、第二个下划线前的内容(无第二个下划线时取第一个下划线后的全部内容)的需求,以下是可行的SQL解决方案:
方法一:结合SUBSTRING与CASE判断
SELECT MyFld, SUBSTRING( MyFld, CHARINDEX('_', MyFld) + 1, CASE -- 无第二个下划线时,取第一个下划线后的全部长度 WHEN CHARINDEX('_', MyFld, CHARINDEX('_', MyFld) + 1) = 0 THEN LEN(MyFld) - CHARINDEX('_', MyFld) -- 有第二个下划线时,取两个下划线之间的长度 ELSE CHARINDEX('_', MyFld, CHARINDEX('_', MyFld) + 1) - CHARINDEX('_', MyFld) - 1 END ) AS ExtractedValue FROM YourTable;
方法二:嵌套LEFT与SUBSTRING简化逻辑
SELECT MyFld, LEFT( SUBSTRING(MyFld, CHARINDEX('_', MyFld) + 1, LEN(MyFld)), -- 给截取后的内容追加下划线,确保找不到时返回全部长度 CHARINDEX('_', SUBSTRING(MyFld, CHARINDEX('_', MyFld) + 1, LEN(MyFld)) + '_') - 1 ) AS ExtractedValue FROM YourTable;
逻辑说明
- 第一步通过
CHARINDEX('_', MyFld)定位第一个下划线的位置,用SUBSTRING截取该位置之后的所有内容; - 第二步判断截取后的内容中是否存在下划线:
- 不存在则直接返回全部截取内容;
- 存在则截取到该下划线之前的部分,得到目标数据。
内容的提问来源于stack exchange,提问作者shykitten
相关产品推荐
相关产品推荐

