SQL查询按条件返回布尔值的COALESCE类型不匹配问题咨询
问题根因
- COALESCE 函数要求所有输入参数为兼容数据类型,原语句第一个参数是
timestamp with time zone类型的时间字段,第二个参数是布尔类型的true,类型不匹配触发报错。 - 原 SQL 的
WHERE子句添加了some_timestamp > now()过滤条件,会直接过滤掉不满足该条件的行,无法得到需要返回false的结果,逻辑不符合需求。 - 原SQL表名
user_satus疑似拼写错误,常规拼写为user_status,请自行核对实际表名。
正确实现
方案1:适用于确定 id=3344 一定存在对应记录的场景
将时间比较逻辑放到 SELECT 字段中,再用 COALESCE 处理 some_timestamp 为 null 的场景,此时所有参数均为布尔类型,不会出现类型不匹配问题:
SELECT COALESCE(some_timestamp > now(), false) AS "isFinished" FROM user_status WHERE id = 3344;
方案2:适用于 id=3344 可能不存在对应记录的场景
用 EXISTS 语法实现,无论是否存在对应记录都会返回布尔结果,性能更优:
SELECT EXISTS ( SELECT 1 FROM user_status WHERE id = 3344 AND some_timestamp > now() ) AS "isFinished";
内容的提问来源于stack exchange,提问作者Ted
相关产品推荐
相关产品推荐

