【发布时间】:2016-08-21 16:21:22
【问题描述】:
这可能是一个非常基本的问题,但我只是在编写查询时遇到了它。
为什么 SQL Server 不能将NULL 的支票转换为BIT?我在想这样的事情:
DECLARE @someVariable INT = NULL;
-- Do something
SELECT CONVERT(BIT, (@someVariable IS NULL))
然后,预期结果将是 1 或 0。
【问题讨论】:
-
可以,但没有。例如,MySQL 可以并且确实做到了 ;-)
-
@ÁlvaroGonzález MySQL 包含 很多 非标准语句,甚至 break 的 SQL 逻辑。
IS不能在条件表达式之外使用。它 不是 比较运算符。在空值逻辑中,任何与 NULL 的比较都是为空。IS NULL和IS NOT NULL是唯一可以使用的条件运算符 -
@PanagiotisKanavos 我知道
foo=NULL与foo IS NULL不同(以及为什么)。但是,是否存在某些特定情况下 MySQL 实现会破坏某些东西?毕竟,当您使用WHERE deletion_date IS NULL时,您最终会得到一个布尔不可为空的决定:显示该行 o not。 -
@ÁlvaroGonzález 是的,有很多。首先,BIT 不是布尔值,它只是一个数字。有一种不同的可选 BOOLEAN 类型,仅由 PostgreSQL 实现。其次,该演员确实打破了3VL。任何与 NULL 的比较都应返回 NULL,但任意转换不会。如果您想用
1替换NULL,只需使用NULLIF或COALESCE之类的函数。最后,您可以强制转换 NULL 来表示特定类型的缺失值。CAST(NULL as BIT)是 允许并返回一个 NULL BIT
标签: sql-server tsql sql-server-2014