dii*_*___ 5 t-sql sql-server sql-server-2014
这可能是一个非常基本的问题,但我只是在编写查询时遇到它.
为什么不能SQL Server转换的支票NULL来BIT?我在考虑这样的事情:
DECLARE @someVariable INT = NULL;
-- Do something
SELECT CONVERT(BIT, (@someVariable IS NULL))
Run Code Online (Sandbox Code Playgroud)
预期结果将是1或0.
Gor*_*off 13
用途case:
SELECT CONVERT(BIT, (CASE WHEN @someVariable IS NULL THEN 1 ELSE 0 END))
Run Code Online (Sandbox Code Playgroud)
在 SQL 语言中,NULL 不被视为数据值。它们代表失踪/未知的状态。引用维基百科关于 SQL NULL 的文章:
SQL null 是一种状态(未知),而不是一个值。这种用法与大多数编程语言有很大不同,其中 null 表示未分配给特定实例。
这意味着与该值的任何比较UNKNOWN只能是UNKNOWN其本身。即使比较两个 NULL 也不能返回 true:如果两个值都是未知的,我们怎么能说它们相等或不相等呢?
IS NULL和IS NOT NULL是可以在条件表达式中使用的谓词。这意味着它们本身不返回值。因此,它们不能被“转换”为 bit 或被视为布尔值。
基本 SQL 比较运算符在将任何内容与 Null 进行比较时始终返回 Unknown,因此 SQL 标准提供了两个特殊的特定于 Null 的比较谓词。IS NULL 和 IS NOT NULL 谓词(使用后缀语法)测试数据是否为 Null。
处理空值的任何其他方式都是供应商特定的扩展。
最后,不是BIT布尔类型,它只是一个单位数字。SQL 1999 中引入了可选类型,但只有 PostgreSQL 正确实现了它,即具有,或值。BOOLEANTRUEFALSEUNKNOWN
如果没有类型,您就无法真正计算条件表达式(如or )BOOLEAN的结果。您只能使用或之类的函数将 NULL 值替换为其他值。A AND Bx IS NULLNULLIFCOALESCE