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

PostgreSQL中如何在SELECT的CASE语句中判断值是否属于预定义字符串列表

PostgreSQL报错修复方案

错误原因

  • PostgreSQL语法中,双引号"仅用于标识数据库对象(列名、表名、别名等),字符串常量必须使用单引号'包裹。你代码中用双引号包裹A1、A2等字符串值,数据库会将其识别为列名检索,因此触发column "A1" does not exist报错。

修正后代码

仅需将所有字符串值的包裹符号从双引号改为单引号即可,完全支持无固定规则的离散字符串匹配:

create table B as 
select 
  c,
  CASE when d in ('A1', 'A2', 'A3') then 1 end as TYPE1,
  CASE when d in ('B1', 'B2', 'B3') then 1 end as TYPE2
from A;

可选优化(长列表场景)

如果后续TYPE1、TYPE2对应的匹配字符串数量较多,可以用数组匹配写法简化代码,执行逻辑和效果完全一致:

create table B as 
select 
  c,
  CASE when d = ANY('{A1,A2,A3}'::text[]) then 1 end as TYPE1,
  CASE when d = ANY('{B1,B2,B3}'::text[]) then 1 end as TYPE2
from A;

补充说明:如果需要未命中匹配时字段值为0而非NULL,可以在CASE语句中补充ELSE 0即可,例如:CASE when d in ('A1', 'A2', 'A3') then 1 ELSE 0 end as TYPE1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:06:05