Azure SQL数据仓库:如何用通配符合并CASE语句多WHEN条件?
通配符匹配多单词及CASE条件合并方案
在Microsoft Azure SQL Data Warehouse中,可以将多个WHEN条件合并为单个WHEN,仅使用支持的通配符和基础函数实现原逻辑,具体如下:
合并后的SQL代码
CASE WHEN PhoneNumber LIKE '%[0-9]EXT[0-9]%' OR PhoneNumber LIKE '%[0-9]EST[0-9]%' OR PhoneNumber LIKE '%[0-9]XTN[0-9]%' OR PhoneNumber LIKE '%[0-9]XT[0-9]%' OR PhoneNumber LIKE '%[0-9]EX[0-9]%' OR PhoneNumber LIKE '%[0-9]X[0-9]%' OR PhoneNumber LIKE '%[0-9]E[0-9]%' THEN REPLACE(PhoneNumber, CASE WHEN PhoneNumber LIKE '%[0-9]EXT[0-9]%' THEN 'EXT' WHEN PhoneNumber LIKE '%[0-9]EST[0-9]%' THEN 'EST' WHEN PhoneNumber LIKE '%[0-9]XTN[0-9]%' THEN 'XTN' WHEN PhoneNumber LIKE '%[0-9]XT[0-9]%' THEN 'XT' WHEN PhoneNumber LIKE '%[0-9]EX[0-9]%' THEN 'EX' WHEN PhoneNumber LIKE '%[0-9]X[0-9]%' THEN 'X' WHEN PhoneNumber LIKE '%[0-9]E[0-9]%' THEN 'E' END, ' EXT ') ELSE PhoneNumber -- 保留原字段值(若原CASE有ELSE可替换) END
核心逻辑说明
- 合并WHEN条件:用
OR将所有原LIKE匹配条件整合到单个WHEN中,实现一次判断覆盖所有目标场景。 - 精准替换对应字符串:嵌套CASE语句判断当前匹配的具体子串,确保替换逻辑与原代码完全一致——不同的匹配子串统一替换为
' EXT '。 - Azure SQL DW兼容性:全程仅使用
LIKE通配符(%任意字符、[]指定字符组)、REPLACE和CASE,均为Azure SQL Data Warehouse原生支持的语法,无兼容性问题。
关于通配符匹配多单词的补充
由于Azure SQL Data Warehouse的LIKE仅支持基础通配符,无法用单个LIKE模式直接匹配多个不同长度的单词,必须通过OR连接多个LIKE条件实现多单词匹配。
内容的提问来源于stack exchange,提问作者user8314628
相关产品推荐
相关产品推荐

