我在DB2中有这个查询
SELECT * FROM SOMESCHEMA.SOMETABLE WHERE SYSDATE > @A
Run Code Online (Sandbox Code Playgroud)
如果SYSDATE是NULL,是否会大于任何值@A,假设@A和SOMESCHEMA.SOMETABLE.SYSDATE是一个Date数据类型?
请帮忙.提前致谢.
Egg*_*ggi 11
另一个用于比较可以包含NULL值的值的谓词是DISTINCT谓词.如果两列包含相等的非空值,则使用正常的相等比较(COL1 = COL2)比较两列将为真.如果两个列都为null,则结果将为false,因为null永远不会等于任何其他值,甚至不是另一个null值.使用DISTINCT谓词,空值被认为是相等的.因此,如果两列都包含相等的非空值,并且两列都是空值,则COL1中的COL1不是DISTINCT将为真.
这意味着所有比较操作都将是错误的,因为您正在将未知值与某些内容进行比较.所以无论你使用哪种比较(只有IS NULL/IS NOT NULL操作都可以工作!),它都是错误的.
如果您希望查询起作用,您应该使用类似的东西
SELECT *
FROM SOMESCHEMA.SOMETABLE
WHERE COALESCE(SYSDATE, TIMESTAMP_FORMAT('0001-01-01 23:59:59', 'YYYY-MM-DD HH24:MI:SS')) > @A
Run Code Online (Sandbox Code Playgroud)
另一种可能性是用于IS NULL测试值是否为null:
SELECT * FROM SOMESCHEMA.SOMETABLE WHERE SYSDATE > @A OR SYSDATE IS NULL
Run Code Online (Sandbox Code Playgroud)
将包含返回值集合中的值,而不是COALESCE函数.它只适用于简单的情况.
| 归档时间: |
|
| 查看次数: |
29767 次 |
| 最近记录: |