我在DB2中有这个查询
SELECT * FROM SOMESCHEMA.SOMETABLE WHERE SYSDATE > @A
如果
SYSDATE
为NULL
,那么假设@A
和SOMESCHEMA.SOMETABLE.SYSDATE
都是Date数据类型的值,SYSDATE
是否大于@A
中的任何值?请帮忙解答,谢谢。我在DB2中有这个查询
SELECT * FROM SOMESCHEMA.SOMETABLE WHERE SYSDATE > @A
SYSDATE
为NULL
,那么假设@A
和SOMESCHEMA.SOMETABLE.SYSDATE
都是Date数据类型的值,SYSDATE
是否大于@A
中的任何值?请帮忙解答,谢谢。这意味着所有比较操作都将为假,因为您正在将未知值与其他值进行比较。因此,无论使用哪种比较(仅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 永远不等于任何其他值
,那么 equal 和 greater than 条件是一样的吗?请帮忙。 - John Isaiah CarmonaIS DISTINCT FROM
。第三,在涉及到 null 的 greater than
比较中,评估结果为 UNKNOWN,例如 SYSDATE > NULL
的结果为 UNKNOWN
。粗略地说,在 SQL DML 中,这将导致行从结果中删除,但在 SQL DDL 中将导致约束得到满足并且更新成功。处理 Null 是非直观和容易出错的:我强烈建议您完全避免使用 null。 - onedaywhen另一种可能性是使用 IS NULL
来测试一个值是否为空:
SELECT * FROM SOMESCHEMA.SOMETABLE WHERE SYSDATE > @A OR SYSDATE IS NULL
相较于 COALESCE
函数,它会将该值包含在返回值集合中。不过,它只适用于简单情况。
您可以使用此解决方案来比较两个可空日期 (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