PostgreSQL中CASE WHEN语句报错:invalid input syntax for integer: "OK"求助
问题原因与解决方案
嘿,这个报错我太熟悉了,典型的数据类型不匹配问题!
你遇到的ERROR: invalid input syntax for integer: "OK",核心问题出在CASE表达式的返回类型一致性上:
- 你的
THEN分支返回的是字符串类型('OK'、'BAD') - 但
ELSE分支直接返回了整数类型的status字段
PostgreSQL处理CASE表达式时,会强制所有分支的结果统一为同一种数据类型。这里因为整数类型的优先级比文本高,数据库会自动尝试把字符串'OK'转换成整数——这显然是不可能完成的操作,所以直接抛出了转换失败的错误。
修正方案
只需要把ELSE分支的status转换成文本类型,让所有分支返回一致的类型就可以解决问题。用PostgreSQL的类型转换语法::text就能轻松实现:
SELECT xxxx, CASE WHEN status = 11 THEN 'OK' WHEN status = 33 THEN 'BAD' ELSE status::text -- 将整数status转为文本类型 END AS status_desc, -- 建议给这个字段起个清晰的别名 ……
修改后,CASE表达式的所有结果都是文本类型,数据库无需再做无效的类型转换,查询就能正常执行啦。
内容的提问来源于stack exchange,提问作者absolute333
相关产品推荐
相关产品推荐

