You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用CASE语句判断列是否以指定列表值开头?IN加通配符失效如何处理

问题解答

核心结论

不能在IN运算符中使用通配符,因为IN只做精确值匹配,不会解析%这类通配符,所以你写的CASE条件永远不会触发NEW_NAME分支。

替代方案

根据你使用的数据库,推荐以下几种简化写法:

1. 支持LIKE ANY的数据库(如PostgreSQL)

这是最接近你需求的“一行式”写法:

CASE 
    WHEN COLUMN LIKE ANY ('{AAA%, WWW%, XXX%, YYY%, ZZZ%}')
        THEN NEW_NAME 
        ELSE COLUMN
END

2. MySQL/MariaDB

可以用正则表达式匹配前缀:

CASE 
    WHEN COLUMN REGEXP '^(AAA|WWW|XXX|YYY|ZZZ)'
        THEN NEW_NAME 
        ELSE COLUMN
END

如果不想用正则,也可以用OR连接多个LIKE(逻辑清晰,也可以写成一行):

CASE 
    WHEN COLUMN LIKE 'AAA%' OR COLUMN LIKE 'WWW%' OR COLUMN LIKE 'XXX%' OR COLUMN LIKE 'YYY%' OR COLUMN LIKE 'ZZZ%'
        THEN NEW_NAME 
        ELSE COLUMN
END

3. SQL Server

可以用STRING_SPLIT结合子查询实现动态匹配:

CASE 
    WHEN EXISTS (
        SELECT 1 FROM STRING_SPLIT('AAA,WWW,XXX,YYY,ZZZ', ',')
        WHERE COLUMN LIKE CONCAT(value, '%')
    )
        THEN NEW_NAME 
        ELSE COLUMN
END

或者用PATINDEX函数替代多个LIKE:

CASE 
    WHEN PATINDEX('AAA%', COLUMN) > 0 OR PATINDEX('WWW%', COLUMN) > 0 OR PATINDEX('XXX%', COLUMN) > 0 OR PATINDEX('YYY%', COLUMN) > 0 OR PATINDEX('ZZZ%', COLUMN) > 0
        THEN NEW_NAME 
        ELSE COLUMN
END

内容的提问来源于stack exchange,提问作者Kale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 18:18:16