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

PostgreSQL使用CASE判断varchar数组含指定文本返回对应值

错误原因

你注释的两段判断逻辑无法生效,核心问题有两个:

  • 第一段判断用category::char like '%Fruit%'属于错误用法:数组类型强转char的结果不可靠,且like模糊匹配无法精准匹配数组的独立元素,比如数组存在FruitPie这类元素时会出现误判,不属于标准的数组元素判断语法。
  • 第二段判断存在值拼写错误:规则要求匹配的分类值是Veggie,代码里写的是Vegetable,值不匹配自然无法命中逻辑。
正确实现

PostgreSQL中判断varchar[]类型数组是否包含指定元素,优先使用数组包含运算符@>,语义清晰且性能更好,调整后的完整SQL如下:

select *,
     case
         when item = 'Banana' and category @> ARRAY['Fruit']::varchar[] then 'add_fruit'
         when item in ('Potato', 'Carrot') and category @> ARRAY['Veggie']::varchar[] then 'add_veggie'
         else 'do_not_add'
     end as include_item
from my_table;

如果偏好any()语法,也可以将判断逻辑写成如下形式,只要修正拼写错误即可正常生效:

select *,
     case
         when item = 'Banana' and 'Fruit' = any(category) then 'add_fruit'
         when item in ('Potato', 'Carrot') and 'Veggie' = any(category) then 'add_veggie'
         else 'do_not_add'
     end as include_item
from my_table;

注意:CASE语句是顺序判断匹配,只要命中第一个符合的条件就会返回对应值,当前业务规则没有逻辑冲突,两种写法的判断顺序都可以满足要求。

执行上述代码后,返回结果和你给出的预期样例完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:12:27