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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:18:00