【问题标题】:Is Null Greater Than Any Date Data Type?Null 是否大于任何日期数据类型?
【发布时间】:2012-03-26 15:45:14
【问题描述】:

我在DB2有这个查询

SELECT * FROM SOMESCHEMA.SOMETABLE WHERE SYSDATE > @A

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

请帮忙。提前致谢。

【问题讨论】:

  • 如果 DB2 具有“ANSI NULL”语义,那么唯一正确的二元运算符应该是“IS NULL”,AFAIK。
  • @pst DB2 has ANSI唯一正确的二元运算符应该是“IS NULL”是什么意思?
  • isnull 是一元运算符...

标签: sql null db2


【解决方案1】:

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

DB2 Null Handling

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

【讨论】:

  • 感谢您的回答,但对我来说似乎有点模糊。上面写着:null is never equal to any other value, equalgreater than 条件一样吗?请帮忙。
  • 我编辑了我的答案,以明确如果比较的一侧或两侧包含空值(IS/IS NOT NULL 除外),所有比较都会失败。
  • Super duper ultra mega 非常感谢您的帮助,但是您的fail是什么意思,因为在查询中会抛出错误?
  • 它不会返回任何结果。比较被评估为假(这就是我所说的失败)。
  • 其次,您自己指出另一个与 null 的比较可以评估为 TRUE 例如IS DISTINCT FROM。第三,greater than 涉及空值的比较评估为 UNKNOWN,例如SYSDATE > NULL 计算结果为 UNKNOWN。粗略地说,在 SQL DML 中,这将导致从结果中删除该行,但在 SQL DDL 中,将导致满足约束并且更新成功。空值处理不直观且容易出错:我强烈建议您完全避免空值。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    您可以使用此解决方案比较两个可为空的日期(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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-06
      • 2015-07-29
      • 2012-10-30
      相关资源
      最近更新 更多