在oracle视图上使用“之间”进行日期查询

在oracle视图上使用“之间”进行日期查询,oracle,Oracle,我在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”操作符,但仍然没有给我记录 请提供一些信息 *che

我在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\u date定义为date

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

你可能想要

AND CHECKER_DATE BETWEEN trunc(sysdate) - 1 AND trunc(sysdate)
最有可能的是,这仍然不会提供您想要的内容,因为这将包括来自“今天”的行
trunc(sysdate)
表示“今天午夜”,今天午夜之后创建的任何行都不包括在内。对于日期/时间值(Oracle的日期类型确实包含时间,尽管名称不同),最好不要使用BETWEEN,而是使用显式范围运算符:

AND CHECKER_DATE >= trunc(sysdate) - 1 
AND CHECKER_DATE < trunc(sysdate) + 1
和CHECKER\u DATE>=trunc(sysdate)-1
和CHECKER_DATE
trunc(sysdate)+1
是明天午夜,因此(严格地)小于该值的任何值都是“今天”



以上所有假设
CHECKER\u DATE
定义为
DATE
TIMESTAMP

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

你可能想要

AND CHECKER_DATE BETWEEN trunc(sysdate) - 1 AND trunc(sysdate)
最有可能的是,这仍然不会提供您想要的内容,因为这将包括来自“今天”的行
trunc(sysdate)
表示“今天午夜”,今天午夜之后创建的任何行都不包括在内。对于日期/时间值(Oracle的日期类型确实包含时间,尽管名称不同),最好不要使用BETWEEN,而是使用显式范围运算符:

AND CHECKER_DATE >= trunc(sysdate) - 1 
AND CHECKER_DATE < trunc(sysdate) + 1
和CHECKER\u DATE>=trunc(sysdate)-1
和CHECKER_DATE
trunc(sysdate)+1
是明天午夜,因此(严格地)小于该值的任何值都是“今天”


以上所有假设
CHECKER\u DATE
定义为
DATE
TIMESTAMP
您可以尝试:

SELECT * 
FROM MY_VIEW 
WHERE STATUS = 'Active' 
AND CHECKER_DATE BETWEEN trunc(sysdate - 1) AND trunc(sysdate);
Oracle建议不要使用to_date代替date。trunc在这里也是因为trunc删除了时间组件

您可以尝试:

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

Oracle建议不要使用to_date代替date。trunc在这里也是因为trunc删除了时间组件

可能是记录不“活动”或“活动”一个参考表中不存在的值(如果有)以及trunc(sysdate-1)和trunc(sysdate)将有助于可能是记录不“活动”或“活动”一个参考表中不存在的值(如果有)和trunc(sysdate-1)和trunc(sysdate)您的
我的视图
和原始数据库表是什么?如果不知道,每个人都无法回答。永远不要对已经是日期的值调用
to_date()
。这将首先将
date
值转换为
varchar
,只需将
varchar
转换回最初的
date
。您可能需要
trunc(sysdate-1)
您的
MY_视图和原始数据库表是什么?如果不知道,每个人都无法回答。永远不要对已经是日期的值调用
to_date()
。这将首先将
date
值转换为
varchar
,只需将
varchar
转换回最初的
date
。您可能需要更新
trunc(sysdate-1)
。谢天谢地。谢谢