SQL按分隔符提取子串:拆分Custom1维度值的中间数值问题
解决按'x'拆分维度字段的中间值提取问题
你当前的代码里,Widths字段会把第一个'x'之后的所有内容都取出来(比如对47x29x10会得到29x10),这显然不符合需求。下面是修正后的完整方案:
修正后的SQL代码
SELECT -- 提取第一个数值(Length) TRIM(SUBSTRING(Custom1, 1, CHARINDEX('x', Custom1) - 1)) AS Length, -- 提取中间数值(Width):定位两个'x'的位置,截取中间内容 TRIM(SUBSTRING( Custom1, CHARINDEX('x', Custom1) + 1, CHARINDEX('x', Custom1, CHARINDEX('x', Custom1) + 1) - CHARINDEX('x', Custom1) - 1 )) AS Width, -- 提取最后一个数值(Height):两种方式任选其一 TRIM(SUBSTRING( Custom1, CHARINDEX('x', Custom1, CHARINDEX('x', Custom1) + 1) + 1, LEN(Custom1) )) AS Height -- 或者保留你原来的反转截取方式: -- REVERSE(SUBSTRING(REVERSE(Custom1), 1, CHARINDEX('x', REVERSE(Custom1)) - 1)) AS Height FROM Table
关键逻辑说明
- Width的提取:用
CHARINDEX的第三个参数,指定从第一个'x'的下一位开始查找第二个'x'的位置,然后通过两个'x'的位置差,精准截取中间的数值部分,不受分隔符间字符长度限制。 - Length和Height:Length的提取逻辑没问题;Height可以选择用第二个'x'的位置往后截取,也可以保留你原来的反转截取逻辑,两种方式都能正确提取末尾数值。
内容的提问来源于stack exchange,提问作者Bb22
相关产品推荐
相关产品推荐

