如何在不支持 SQL Server 2008R2 的 SQL 实现中重写包含标准 IS DISTINCT FROM
和 IS NOT DISTINCT FROM
运算符的表达式?
最佳答案
IS DISTINCT FROM
谓词是作为 SQL:1999 的功能 T151 引入的,其可读否定 IS NOT DISTINCT FROM
是作为 SQL 的功能 T152 添加的: 2003年。这些谓词的目的是保证比较两个值的结果是 True 或 False,而不是 Unknown。
这些谓词适用于任何可比较的类型(包括行、数组和多重集),使得精确模拟它们变得相当复杂。然而,SQL Server 不支持大多数类型,因此我们可以通过检查空参数/操作数来取得很大的进展:
a 与 b 不同
可以重写为:((a <> b OR a IS NULL OR b IS NULL) AND NOT (a IS NULL AND b IS NULL))
a 与 b 不同
可以重写为:(NOT (a <> b OR a IS NULL OR b IS NULL) OR (a IS NULL AND b IS NULL))
您自己的答案不正确,因为它没有考虑到 FALSE OR NULL
的计算结果为未知。例如,NULL IS DISTINCT FROM NULL
的计算结果应为False。同样,1 IS NOT DISTINCT FROM NULL
的计算结果应为False。在这两种情况下,您的表达式都会产生未知。
关于sql - 如何在SQL Server 20008R2中重写IS DISTINCT FROM和IS NOT DISTINCT FROM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10416789/