在oracle视图中使用BETWEEN进行DATE查询



当我执行以下查询时,我在oracle视图中使用'between'运算符进行日期参数查询时遇到问题:

SELECT * 
FROM MY_VIEW 
WHERE STATUS = 'Active' 
AND CHECKER_DATE BETWEEN to_date(sysdate - 1, 'DD-MON-YY') AND to_date(sysdate, 'DD-MON-YY');

它没有给我记录(实际上我在那个日期有任何记录(。

我尝试使用"in"运算符,但仍然没有给我记录。

请提供一些信息。

*checker_date定义为日期

您的第一个错误是对一个已经是date的值调用to_date((。to_date()需要一个VARCHAR值,因此sysdate将首先转换为VARCHAR,然后立即转换回它最初的DATE值。

你可能想要

AND CHECKER_DATE BETWEEN trunc(sysdate) - 1 AND trunc(sysdate)

很可能这仍然不会满足您的需要,因为这将包括"today"中的行。trunc(sysdate)的意思是"今天午夜",今天午夜之后创建的任何行都不包括在内。对于日期/时间值(Oracle的date类型确实包含时间,尽管有名称(,最好不要使用BETWEEN,而是使用显式范围运算符:

AND CHECKER_DATE >= trunc(sysdate) - 1 
AND CHECKER_DATE < trunc(sysdate) + 1

trunc(sysdate) + 1是明天午夜,所以任何(严格地(小于它的值都是"今天"。


以上所有假设CHECKER_DATE被定义为DATETIMESTAMP

您可以尝试:

SELECT * 
FROM MY_VIEW 
WHERE STATUS = 'Active' 
AND CHECKER_DATE BETWEEN trunc(sysdate - 1) AND trunc(sysdate);

Oracle建议不要使用to_date作为日期。这里还有trunc,因为trunc删除了时间组件。

可能是记录不是"活动"或"活动",如果有,则在其中一个引用表中不存在值,trunc(sysdate-1(和trunc(sysdate(将有助于

最新更新