日期:2014-05-17 浏览次数:21036 次
select * from youtablename where commit_time between to_char(sysdate,'yyyymmdd')||'0900' and to_char(sysdate,'yyyymmdd')||'1000' UNION ALL select * from youtablename where commit_time between to_char(sysdate,'yyyymmdd')||'1500' and to_char(sysdate,'yyyymmdd')||'1600'
------解决方案--------------------
select * from A where substr(commit_time, 9) between '090000' and '100000' or substr(commit_time, 9) between '150000' and '160000'
如果不含后面的时间点则应该为:
select * from A where substr(commit_time, 9) between '090000' and '095959' or substr(commit_time, 9) between '150000' and '155959'
------解决方案--------------------
commit_time 字段如果是字符类型 可以先将转换成日期类型to_date 然后再 to_char转换成字符
select to_char(to_date( '20080301112536 ', 'yyyymmddhhmiss '), 'Hh24:mi:ss ') from dual
下面的代码 可以试试。。。。自己把表名和列名改下。
select
a.commit_id,
a.commit_name,
a.commit_time
from
(select commit_id,
commit_name,
commit_time,
case when to_char(to_date( '20080301112536 ', 'yyyymmddhhmiss '), 'Hh24:mi ')> = '09:00 '
and to_char(to_date( '20080301112536 ', 'yyyymmddhhmiss '), 'Hh24:mi ') <= '10:00 ' then 1
when to_char(to_date( '20080301112536 ', 'yyyymmddhhmiss '), 'Hh24:mi ')> = '09:00 '
and to_char(to_date( '20080301112536 ', 'yyyymmddhhmiss '), 'Hh24:mi ') <= '10:00 ' then 1
else 0
end temp_column
from table_name ) a
where a.temp_column = 1