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