Null是否大于任何日期数据类型?

时间:2012-03-09 06:29:56

标签: sql null db2

我在DB2

中有此查询
SELECT * FROM SOMESCHEMA.SOMETABLE WHERE SYSDATE > @A

如果SYSDATENULL,则假设@A@A日期,它会大于SOMESCHEMA.SOMETABLE.SYSDATE的任何值吗? 数据类型?

请帮忙。提前谢谢。

3 个答案:

答案 0 :(得分:11)

  

另一个用于比较可以包含NULL值的值的谓词是DISTINCT谓词。如果两列包含相等的非空值,则使用正常的相等比较(COL1 = COL2)比较两列将为真。如果两个列都为null,则结果将为false,因为null永远不会等于任何其他值,甚至不是另一个null值。使用DISTINCT谓词,空值被认为是相等的。因此,如果两列都包含相等的非空值,并且两列都是空值,则COL1中的COL1不是DISTINCT将为真。

DB2 Null Handling

这意味着所有比较操作都将为false,因为您正在将未知值与某些内容进行比较。所以无论你使用哪种比较(只有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

答案 1 :(得分:7)

另一种可能性是使用IS NULL来测试值是否为null:

  SELECT * FROM SOMESCHEMA.SOMETABLE WHERE SYSDATE > @A OR SYSDATE IS NULL

将包含您返回值集合中的值,而不是COALESCE函数。它只适用于简单的情况。

答案 2 :(得分:1)

您可以使用此解决方案比较两个可以为空的日期(P.EndDate,C.EndDate):

[MinDate] =
        CASE
            WHEN
                ISNULL(C.EndDate,P.EndDate) <= ISNULL(P.EndDate,C.EndDate) 
            THEN
                ISNULL(C.EndDate,P.EndDate)
            ELSE
                ISNULL(P.EndDate,C.EndDate)
        END