SQL 移除冗余字符:从长拼接属性串中仅提取目标Size键值
SQL提取属性字段中Size值的修改方案
原有写法的问题根源
- 当前的CASE截取逻辑没有设置截断边界:找到
Size的起始位置后,直接从该位置一直取到整个Attributes字符串的末尾,自然会把后面拼接的所有冗余属性、空逗号都带出来 - 匹配精度不足:用
charindex('Size ', Attributes)定位时多带了多余空格,很容易出现位置偏移,甚至误把其他带Size字样的属性(比如样例里的Fits to Chest Size)当成目标值
可直接使用的修改逻辑
核心思路:以逗号作为属性段的分隔锚点,定位到Size键值对的前后两个逗号位置,只截取两个逗号之间的有效内容,不保留后面的冗余串。
适配你当前使用的SQL Server语法,修改后的CASE语句如下:
CASE -- 强制匹配被逗号包裹的独立Size属性段,避免误匹配其他带Size字样的无关属性 WHEN Attributes LIKE '%,Size = %,%' THEN SUBSTRING( Attributes, -- 定位目标内容的起始位置,跳过前面的分隔逗号 CHARINDEX(',Size = ', Attributes) + 1, -- 计算截取长度:从Size位置开始,找到下一个逗号的位置,减去当前位置偏移,正好取出完整的Size值 CHARINDEX(',', Attributes, CHARINDEX(',Size = ', Attributes) + LEN(',Size = ')) - CHARINDEX(',Size = ', Attributes) - 1 ) ELSE '' END AS Size
效果说明
- 用你提供的样例字符串测试,最终输出结果就是
Size = XXL,后面拼接的其他属性、连续空逗号的冗余内容会被全部截断 - 匹配规则做了防误判优化:不会把
Fits to Chest Size这类本身包含Size关键词的其他属性当成提取目标 - 兼容实际数据中可能出现的“属性串末尾没有逗号”的边界情况,不会因为格式不固定报错
- 小提示:如果发现提取出来的Size值前后带多余空格,可以在外层的SUBSTRING结果外面套一层
TRIM()函数,去掉首尾空白,让输出结果更干净
内容的提问来源于stack exchange,提问作者Jason Gerding
相关产品推荐
相关产品推荐

