查询未获取当前日期结果

时间:2015-07-22 06:09:45

标签: sql oracle

我从表中获取特定日期范围的数据,但查询未获取今天的数据日期。为什么会这样?

select * 
from mytable 
where action_date >= to_date('01/07/2015', 'DD/MM/YYYY') 
and action_date <= to_date('22/07/2015', 'DD/MM/YYYY');

结果未显示22/07/2015数据。

修改:

ACTION_DATE TIMESTAMP(6)

该列中的示例日期:

  

22/07/15 12:47:18.000000000 PM

7 个答案:

答案 0 :(得分:2)

尝试添加时间部分:

select * 
from mytable 
where action_date >= to_date('01/07/2015 00:00:00,000000000', 'DD/MM/YYYY HH24:MI:SS,FF9') 
and action_date <= to_date('22/07/2015 23:59:00,999999999', 'DD/MM/YYYY HH24:MI:SS,FF9');

如果您只提供日期部分,则时间部分会自动添加实际时间,因此如果时间部分稍后您没有获得该行。

答案 1 :(得分:1)

to_date('22/07/2015', 'DD/MM/YYYY') 

这将等于July, 22 2015 00:00:00

来自Oracle文档:

  

Oracle数据库以24小时格式存储时间-HH:MI:SS。默认情况下,   日期字段中的时间是00:00:00 A.M. (午夜)如果没有时间   输入部分。

所以action_date <=/>=会比较data+time

要获得正确的结果,请在time字段中添加date。 例如:

to_date('22/07/2015 12:56', 'DD/MM/YYYY HH24:MI')

答案 2 :(得分:0)

这是因为您在日期中转换为to_date,导致2015年2月22日00:00:00,并且2015/7/2015的action_date时间会附加一些时间。你需要在日期转换action_date。

select * from mytable where cast( action_date >= to_date('01/07/2015', 'DD/MM/YYYY') and cast( action_date as date) <= to_date('22/07/2015', 'DD/MM/YYYY');

答案 3 :(得分:0)

这比(原始)接受的答案要好,后者错过了23:59之后的一小段时间。

select * 
from mytable 
where action_date >= to_date('01/07/2015', 'DD/MM/YYYY') 
and action_date < to_date('22/07/2015', 'DD/MM/YYYY') + 1;

或者如果你不喜欢+1:

select * 
from mytable 
where action_date >= to_date('01/07/2015', 'DD/MM/YYYY') 
and action_date < to_date('23/07/2015', 'DD/MM/YYYY');

答案 4 :(得分:0)

我已经通过这种方式更改了查询,它按预期工作。

SELECT *
FROM mytable 
WHERE action_date                                                    >= to_date('01/07/2015', 'DD/MM/YYYY')
AND TRUNC(to_date(TO_CHAR(action_date, 'DD/MM/YYYY'), 'DD/MM/YYYY')) <= TRUNC(to_date('22/07/2015', 'DD/MM/YYYY'));

答案 5 :(得分:0)

您可以使用以下查询。

select * 
from mytable 
where trunc(action_date) >= to_date('01/07/2015', 'DD/MM/YYYY') 
and trunc(action_date) <= to_date('22/07/2015', 'DD/MM/YYYY');

这将执行日期级别比较,而不是基于日期和确切时间的比较。

答案 6 :(得分:-1)

最简单的解决方案是使用&#39;&lt; nextday&#39;而不是无聊&#39;&lt; = 23:59:59&#39;。

select * from mytable
where action_date >= to_date('01/07/2015', 'DD/MM/YYYY')    
and action_date < to_date('23/07/2015', 'DD/MM/YYYY');