+ -
当前位置:首页 → 问答吧 → 查询指定时间内所有夜晚的数据?

查询指定时间内所有夜晚的数据?

时间:2011-10-09

来源:互联网

查询条件 yyyy-MM-dd 这种格式的。在一个时间段内,要查询出所有夜晚的数据。夜晚的时间是 前一天的18点,到第二天的6点。

作者: liuchengbjaccp   发布时间: 2011-10-09

SQL code

select * from tbl 
 where dtime between to_date('2011-10-01', 'yyyy-mm-dd') - 1 + 18/24 and to_date('2011-10-01', 'yyyy-mm-dd') + 6/24;

作者: opps_zhou   发布时间: 2011-10-09

我说的有点问题,如果我选择的时间是2011-10-01 到 2011-10-02 那么晚上的时间就是 2011-10-01 00:00:00 到 2011-10-01 06:00:00 和 2011-10-01 18:00:00 到 2011-10-01 23:59:59选择的时间段结尾是00:00:00的,所以只要晚上的时间。

作者: liuchengbjaccp   发布时间: 2011-10-09

引用 2 楼 liuchengbjaccp 的回复:
我说的有点问题,如果我选择的时间是2011-10-01 到 2011-10-02 那么晚上的时间就是 2011-10-01 00:00:00 到 2011-10-01 06:00:00 和 2011-10-01 18:00:00 到 2011-10-01 23:59:59选择的时间段结尾是00:00:00的,所以只要晚上的时间。


这更简单
SQL code

select * from tbl 
 where to_char(dtime, 'hh24') <= '06'
   and to_char(dtime, 'hh24') >= '18'
   and trunc(dtime) = to_date('2011-10-01', 'yyyy-mm-dd');



作者: opps_zhou   发布时间: 2011-10-09

貌似还没太懂我的意思,如果我选择的是 2011:01:01 到 2011:10:10呢,这么大的时间差,怎么算?

作者: liuchengbjaccp   发布时间: 2011-10-09

SQL code

select * from table1 
 where to_char(dt, 'hh24') <= '06'
   and to_char(dt, 'hh24') >= '18'
   and dt between  to_date('2011-10-01', 'yyyy-mm-dd') and between to_date('2011-10-02', 'yyyy-mm-dd');


作者: xiaobn_cn   发布时间: 2011-10-09

引用 4 楼 liuchengbjaccp 的回复:
貌似还没太懂我的意思,如果我选择的是 2011:01:01 到 2011:10:10呢,这么大的时间差,怎么算?


只需要修改 and trunc(dtime) = to_date('2011-10-01', 'yyyy-mm-dd');
改成 and trunc(dtime) >= to_date('2011-10-01', 'yyyy-mm-dd') 
  and trunc(dtime) < to_date('2011-10-10', 'yyyy-mm-dd')

作者: opps_zhou   发布时间: 2011-10-09