Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Null是否大于任何日期数据类型?_Sql_Null_Db2 - Fatal编程技术网

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

Sql Null是否大于任何日期数据类型?,sql,null,db2,Sql,Null,Db2,我有这个问题 如果SYSDATE为NULL,假设@A和SOMESCHEMA.somestable.SYSDATE是日期数据类型,它会大于@A的任何值吗 请帮忙。提前谢谢 另一个用于比较可能包含空值的值的谓词是DISTINCT谓词。如果两列包含相等的非空值,则使用普通相等比较(COL1=COL2)比较两列将为真。如果两列都为null,则结果将为false,因为null永远不等于任何其他值,甚至不等于另一个null值。使用DISTINCT谓词,空值被视为相等。因此,如果两列都包含相等的非空值,并且两

我有这个问题

如果
SYSDATE
NULL
,假设
@A
SOMESCHEMA.somestable.SYSDATE
是日期数据类型,它会大于
@A
的任何值吗

请帮忙。提前谢谢

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

这意味着所有比较操作都将为false,因为您正在将未知值与某个值进行比较。因此,无论您使用哪种比较(只有IS NULL/IS NOT NULL操作有效!),它都将为false

如果希望查询正常工作,应该使用

SELECT * 
  FROM SOMESCHEMA.SOMETABLE 
 WHERE COALESCE(SYSDATE, TIMESTAMP_FORMAT('0001-01-01 23:59:59', 'YYYY-MM-DD HH24:MI:SS'))  > @A

另一种可能是使用
is NULL
测试值是否为NULL:

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

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

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

[MinDate]=
案例
什么时候

ISNULL(C.EndDate,P.EndDate)如果DB2具有“ANSI NULL”语义,那么唯一为真的二进制运算符应该为“is NULL”,AFAIK@pst DB2,您所说的唯一为真的二进制运算符应该为“is NULL”是什么意思?
ISNULL
是一元运算符……感谢您的回答,但对我来说似乎有点模糊。上面说:
null永远不等于任何其他值
,是否等于大于条件?请提供帮助。我编辑了我的答案,以明确如果比较的一方或双方都包含null(IS/IS NOT null除外),则所有比较都将失败。超级复制超级超级超级超级感谢您的帮助,但您所说的失败是什么意思,因为在查询中将抛出错误?它不会返回任何结果。比较结果被评估为false(这就是我所说的fail)。其次,您自己指出另一个可以评估为TRUE的null比较,例如,
不同。第三,
大于
涉及空值的比较计算为未知值,例如
SYSDATE>NULL
计算为
UNKNOWN
。不严格地说,在SQLDML中,这将导致从结果中删除行,但在SQLDDL中,这将导致约束得到满足,更新成功。Null处理是非直观的,并且容易出错:我强烈建议您完全避免Null。
  SELECT * FROM SOMESCHEMA.SOMETABLE WHERE SYSDATE > @A OR SYSDATE IS NULL
[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