SQL CASE语句报错:invalid input syntax for type boolean: 'DRAFT' 求合并写法
PostgreSQL CASE 语句简洁写法方案
报错原因
你原来的CASE写法错误在于使用了简单CASE表达式(CASE coe_status这种形式),这种写法的WHEN子句只能指定单个匹配值,不能用AND连接多个字符串值。PostgreSQL会尝试把'DRAFT'转为布尔类型来执行逻辑运算,这就触发了invalid input syntax for type boolean的报错。
简洁合并分支的写法
推荐两种更简洁的实现方式:
方式1:使用搜索CASE表达式 + IN 运算符
这是最直观且常用的写法,直接通过IN匹配多个目标值:
CASE WHEN coe_status = 'PUBLISHED' THEN 'Published' WHEN coe_status IN ('DRAFT', 'REVIEW') THEN 'Open' ELSE 'No-Coes' END
方式2:使用简单CASE表达式 + ANY(ARRAY[])
如果偏好保留CASE coe_status的写法,可以借助PostgreSQL的数组特性:
CASE coe_status WHEN 'PUBLISHED' THEN 'Published' WHEN ANY(ARRAY['DRAFT', 'REVIEW']) THEN 'Open' ELSE 'No-Coes' END
这两种写法都能实现将'DRAFT'和'REVIEW'合并为一个分支返回'Open',比分开写两个WHEN更简洁,也避免了重复代码。
内容的提问来源于stack exchange,提问作者Zubair Amjad
相关产品推荐
相关产品推荐

