我从表中获取特定日期范围的数据,但查询未获取今天的数据日期。为什么会这样?
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
答案 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');