【发布时间】:2023-03-27 16:53:01
【问题描述】:
下面的查询用于获取几天之间的记录计数。 实际上,该特定日期没有记录,因此查询应返回 0。 但是由于一些错误,它返回了错误的值。
SELECT COUNT(*)
FROM transaction_tb
WHERE STATUS NOT IN ('Wrong', 'Dont')
AND to_char(date, 'DD-MM-YYYY') BETWEEN '01-04-2019' AND '31-03-2020';
但在尝试使用以下查询时,它返回 0 作为例外。
SELECT COUNT(*)
FROM transaction_tb
WHERE STATUS NOT IN ('Wrong', 'Dont')
AND to_char(date, 'YYYYMMDD') BETWEEN '20190401' AND '20200331';
两个查询应该返回相同的值。
这些查询有什么区别?
【问题讨论】:
-
这不是检查日期是否在特定范围内的方法。
-
这就是为什么您不通过将日期转换为字符串来比较日期的原因。
'01-01-2099' < '31-12-2000'因为'0' < '3',例如,即使将其解释为日期也没有意义。 Oracle 实际上有一个日期文字的语法 (DATE 'YYYY-MM-DD'),所以使用它。 -
@JeroenMostert 嗨,那么根据某个日期范围获取记录的正确方法是什么?
-
为什么还要将日期转换为字符串?为什么不只比较日期?如果在检查
'9'是否在'1'和'10'之间之前将数字转换为字符串,您将遇到同样的问题。