PostgreSQL中如何用CASE WHEN生成BOOLEAN类型结果?
如何返回BOOLEAN类型结果(针对SQL Server)
你的查询中尝试直接使用true/false作为布尔字面量时出现错误,是因为SQL Server没有原生的BOOLEAN类型,也不支持true/false作为字面量(这是PostgreSQL等数据库的特性),SQL Server用BIT类型来模拟布尔逻辑,1代表真,0代表假。
正确写法
你可以通过以下方式获取等价的布尔类型结果:
方法1:CAST条件结果为BIT类型
最直观的写法,将CASE分支的1/0转换为BIT:
CASE WHEN d.DischargeStatusId = 1 THEN CAST(1 AS BIT) WHEN dr.DischargeRequestStatusId = 1 THEN CAST(0 AS BIT) END AS [is_discharge_status]
方法2:整体CAST为BIT
也可以先判断出数值结果,再统一转换为BIT:
CAST( CASE WHEN d.DischargeStatusId = 1 THEN 1 WHEN dr.DischargeRequestStatusId = 1 THEN 0 END AS BIT ) AS [is_discharge_status]
方法3:使用IIF函数(SQL Server 2012及以上版本支持)
如果你的SQL Server版本支持IIF,可以用更简洁的写法:
IIF(d.DischargeStatusId = 1, CAST(1 AS BIT), IIF(dr.DischargeRequestStatusId = 1, CAST(0 AS BIT), NULL)) AS [is_discharge_status]
补充说明
注意到你的SQL语法(例如用[]包裹标识符、错误码207)属于SQL Server特性,而非PostgreSQL。如果是在PostgreSQL中,直接写true/false的写法是完全有效的,不会出现这个错误。
内容的提问来源于stack exchange,提问作者My August
相关产品推荐
相关产品推荐

