在 DB2 中找不到匹配项时日期无效

Date invalid when no match is found in DB2

我正在 运行 进行一个非常简单的 DB2 查询,它给我一个时间戳错误,因为它找不到 2019-02-29 的记录,因此它返回了一个无效的日期类型。如果我将其更改为 2019-02-28 就可以了。

我似乎找不到合适的 "CASE WHEN" 用途,但是有没有一种简单的方法可以不干扰当前功能而是说 "If this date isn't found just ignore today's date"?

我需要它 运行 即使没有 02-29 的前一年记录

SELECT 'DATE' AS RANGE, COUNT(*) AS COUNT
FROM datesTable
WHERE user = 123
AND newDate BETWEEN '2019-01-01' AND '2019-02-29'

认为 case 应该可行:

newDate BETWEEN '2019-01-01' AND 
        (CASE WHEN '2019-02-29' <> '2019-02-29' THEN '2019-02-29' END)

这假设您正在根据当前日期以某种方式构建值。

问题是因为该列是日期,所以 BETWEEN 的操作数都转换为日期。 case 比较应该通过仅在数据不是禁止日期时进行转换来解决这个问题。

或者,以字符串形式进行比较:

where varchar_format(newDate, 'YYYY-MM-DD') between '2019-01-01' AND '2019-02-29'

这里没有转换到日期,所以应该不会出现错误。也就是说,这将阻止在 newDate.

上使用索引