【发布时间】:2016-04-24 20:41:59
【问题描述】:
我有一个 Teradata SQL 查询,其中包含多个可以为 NULL 的不同日期字段。 我想找到最早/最低的日期,只有当所有日期都为 NULL 时才返回 NULL。
我尝试了 LEAST 函数,但只要任何日期为 NULL,它就会返回 NULL,因为该函数认为它是最低的。
我现在的快速解决方法是将日期合并为“9999-12-31”,然后使用非常丑陋的 CASE 语句将“9999-12-31”替换为 NULL,如果这是 LEAST 函数的结果。
现在我的代码的最小示例:
CASE WHEN
LEAST(
COALESCE(date1, date '9999-12-31')(INTEGER),
COALESCE(date2, date '9999-12-31')(INTEGER)
) = '9999-12-31' THEN NULL
ELSE
LEAST(
COALESCE(date1, date '9999-12-31')(INTEGER),
COALESCE(date2, date '9999-12-31')(INTEGER)
)(DATE)
END
我希望它是这样的:
LEAST_WITHOUT_NULL(date1,date2)
只有在两个日期都为 NULL 的情况下才返回最早的日期和 NULL。
我希望有人能提出一个更好的函数,甚至是更好的重写方法。
【问题讨论】: