如何在PSQL中正确使用条件?DATE_COMPLETED赋值报错排查
问题排查与修正方案
错误原因分析
你的SQL存在4个关键语法/逻辑问题:
- CASE结构误用:你用了
CASE "DATE_COMPLETED" WHEN ...的简单匹配结构,但实际需要判断的是FLAG_CLOSED = 'Y'这个独立条件,而非DATE_COMPLETED等于某个值,必须改用搜索式CASE结构。 - THEN子句错误:
THEN "DATE_COMPLETED"='000000'是赋值语句写法,SQL的CASE返回的是具体值,应该直接写目标值'000000'。 - 重复字段选择:连续两次选择
"SUFFIX",属于冗余操作。 - 重复列名冲突:原SELECT列表已包含
"DATE_COMPLETED",CASE结果又用同名别名,会导致列名重复报错。
修正后的SQL语句
SELECT "JOB", "SUFFIX", "FLAG_CLOSED", -- 搜索式CASE:判断FLAG_CLOSED条件,返回对应值,否则保留原DATE_COMPLETED CASE WHEN "FLAG_CLOSED" = 'Y' THEN '000000' ELSE "DATE_COMPLETED" END AS "DATE_COMPLETED" FROM "JOB_OPERATIONS"
说明
- 去掉了重复的
"SUFFIX"和原"DATE_COMPLETED"字段,改用CASE结果作为最终的DATE_COMPLETED列。 - 当
FLAG_CLOSED = 'Y'时,返回'000000';否则保留原DATE_COMPLETED的值,符合你“否则不执行任何操作”的需求。 - 用
AS显式声明别名,语法更规范。
内容的提问来源于stack exchange,提问作者Jeffery
相关产品推荐
相关产品推荐

