PostgreSQL如何使用支持LIKE/ILIKE多条件的CASE简写语法?
PostgreSQL 简写CASE表达式搭配LIKE/ILIKE的可行性说明
结论
你提到的CASE 变量 WHEN 值这种简化写法(官方称为简单CASE表达式)无法直接搭配LIKE/ILIKE等操作符,该语法仅支持等值匹配场景,不能自定义操作规则。
原因说明
PostgreSQL的CASE表达式分为两类:
- 简单CASE表达式:也就是你最开始用的简写写法,核心逻辑是将
CASE后指定的变量,依次和每个WHEN后的值做等值比较(=),WHEN后只能写常量/固定值,不能写操作符、逻辑判断等片段,数据库不会自动把前置变量补到你写的LIKE前面,所以你尝试的写法不符合语法规则。
合法示例:CASE a WHEN 1 THEN 'one' WHEN 2 THEN 'two' ELSE 'other' END - 搜索CASE表达式:也就是你说的冗长写法,
CASE后不跟变量,每个WHEN后可以写任意返回布尔值的条件,支持LIKE、多逻辑组合等所有判断场景。
替代优化方案(避免重复写变量名)
如果不想重复书写a LIKE XX OR a LIKE YY这类冗余代码,可以结合PostgreSQL的ANY操作符搭配模式数组实现简写,效果和你预期的一致:
SELECT a, CASE WHEN a LIKE ANY (ARRAY['1', '%one%']) THEN 'one' WHEN a LIKE '2' AND a LIKE ANY (ARRAY['%two%', '%too%']) THEN 'two' ELSE 'other' END FROM test;
如果需要不区分大小写匹配,把LIKE换成ILIKE即可。
内容的提问来源于stack exchange,提问作者PainIsAMaster
相关产品推荐
相关产品推荐

