如何提取两个分隔符间的子串并输出至SQL计算列
问题原因
你原有代码的逻辑只跳过了第一个空格,提取的是第一个和第二个空格之间的内容,所以返回了job。要拿到第二个空格和第三个空格之间的目标串,需要先定位到第二个空格的位置,再从该位置往后找第三个空格的位置,截取中间的内容即可。
正确实现代码
ALTER TABLE Test_Data ADD substring_1 AS CASE WHEN short_description LIKE 'ABCD%' -- 校验存在至少3个空格,避免不符合格式的内容触发报错 AND CHARINDEX(' ', short_description, CHARINDEX(' ', short_description) + 1) > 0 AND CHARINDEX(' ', short_description, CHARINDEX(' ', short_description, CHARINDEX(' ', short_description) + 1) + 1) > 0 THEN SUBSTRING( short_description, -- 第二个空格的位置+1,作为截取的起始位置 CHARINDEX(' ', short_description, CHARINDEX(' ', short_description) + 1) + 1, -- 第三个空格位置 减 第二个空格位置 再减1,就是目标串的长度 CHARINDEX(' ', short_description, CHARINDEX(' ', short_description, CHARINDEX(' ', short_description) + 1) + 1) - CHARINDEX(' ', short_description, CHARINDEX(' ', short_description) + 1) - 1 ) ELSE NULL -- 不符合格式的内容返回空,可根据需求调整返回值 END
逻辑说明
CHARINDEX支持传入第三个参数作为查找的起始位置,我们通过嵌套调用依次定位三个空格的位置:
- 最内层
CHARINDEX(' ', short_description)定位第一个空格的位置 - 向外一层基于第一个空格的位置+1作为起始点,查找第二个空格的位置
- 再向外一层基于第二个空格的位置+1作为起始点,查找第三个空格的位置
最终截取两个空格中间的内容,就能得到你需要的目标串。
内容的提问来源于stack exchange,提问作者Mackem2020
相关产品推荐
相关产品推荐

