如何在SQL中计算列逻辑表达式,返回布尔类型的查询结果
解决方案
你原来的写法报错是因为不同SQL方言对直接返回布尔比较表达式的支持存在差异,以下是兼容所有主流关系型数据库的通用写法:
SELECT ACCOUNT_NUMBER, CASE WHEN CREDIT = DEBIT THEN TRUE ELSE FALSE END AS "BALANCED" FROM ACCOUNTS;
不同数据库的可选简化写法
- PostgreSQL、MySQL 8.0+、SQLite等支持直接返回布尔表达式的数据库,也可以用下面的简化写法,用括号包裹表达式可避免语法歧义:
SELECT ACCOUNT_NUMBER, (CREDIT = DEBIT) AS "BALANCED" FROM ACCOUNTS;
- Oracle数据库不支持在SQL查询结果中直接返回布尔类型,可改用数字1/0或者字符Y/N来代表平衡状态:
SELECT ACCOUNT_NUMBER, CASE WHEN CREDIT = DEBIT THEN 1 ELSE 0 END AS "BALANCED" FROM ACCOUNTS;
NULL值特殊处理
如果你的表中CREDIT或DEBIT字段存在NULL值,默认的相等判断会返回非真,若需要将两边均为NULL的场景也判定为平衡,可以调整判断条件:
SELECT ACCOUNT_NUMBER, CASE WHEN CREDIT = DEBIT OR (CREDIT IS NULL AND DEBIT IS NULL) THEN TRUE ELSE FALSE END AS "BALANCED" FROM ACCOUNTS;
内容的提问来源于stack exchange,提问作者Menas
相关产品推荐
相关产品推荐

