PostgreSQL中含substring的CASE更新语句报错,请求修复
修复PostgreSQL UPDATE语句错误
报错核心原因:substring(a."SHRCD")调用不符合PostgreSQL语法,该数据库没有仅接收单个字符型参数的substring函数。结合上下文逻辑,这里无需使用substring,直接判断字段值即可;同理substring(a."SHIR01")也是多余调用。
另外还有两处问题需要修正:
else分支写法错误,应直接返回目标值,不需要"Channel" =的赋值语法- 原语句缺少
f4211_mod与f4211_join的关联条件,不补充会导致f4211_mod全表被批量更新为同一值,需添加实际的关联字段(如下示例用关联字段占位,你需替换为真实的关联键)
修复后的完整语句:
update f4211_mod set "Channel" = case when substring(a."SHURRF", 1, 1) in ('P','2','4','5','7') then 'Showroom' when substring(a."SHURRF", 1, 1) = '6' then 'Binnendienst' when a."SHRCD" in ('A','B') then 'Express' when a."SHIR01" in ('B2B','EDI','ICM','PTC','WBXML') then 'E-commerce' else 'Binnendienst' end from f4211_join as a -- 替换为实际的关联字段,比如主键或唯一键 where f4211_mod.关联字段 = a.关联字段;
额外优化说明:
- 把
substring(a."SHURRF",1,1) in ('6')简化为substring(a."SHURRF",1,1) = '6',逻辑一致且更简洁 - 明确关联条件后,只会更新
f4211_mod中与f4211_join匹配的行,避免误操作
内容的提问来源于stack exchange,提问作者Awesome
相关产品推荐
相关产品推荐

