oracle中指定时间段查询方法
在实际开发过程中总是能够遇见一些关于时间文件,比如获取当前时间最后的两小时的诗句或者近一天的数据
首先让人想到 通过时间查询写出想要获取的数据时间范围,使用的常见的方法有<= >= 或者 Between And
Select s.Id, s.Xm, s.Xh, s.Cjsj
From Student s
Where s.Cjsj Between Sysdate <= to_data(s.cjsj,'yyyy-MM-dd')
我发现有更简单的方法
先看例子
-- 当前时间 减一天
Select sysdate,(sysdate - 1 ) time from dual;
-- 当前时间 减一小时
Select sysdate,(sysdate - 1/24 ) time from dual;
-- 当前时间 减两小时
Select sysdate,(sysdate - 1/12 ) time from dual;
-- 当前时间 减一分钟
Select sysdate,(sysdate - 1/24/60 ) time from dual;
-- 当前时间 减两分钟
Select sysdate,(sysdate - 1/24/120 ) time from dual;
--当前时间两小时内的数据
Select s.Id, s.Xm, s.Xh, s.Cjsj
From Student s
Where s.Cjsj Between Sysdate - 1/12 And Sysdate
Order By s.Cjsj Desc;
Oracle数据库中,sysdate - 1,sysdate - 1/24、sysdate - 1/24/60等,表示 从当前时间往前推对应的时间:
-
A型 表示整天数
例如 Sysdate - A --当前时间往前推 A 天;
-
A/B型 表示小时数 (24* A/B)
理解: A/B类型,则表示往前推 n 小时,A表示天数,B表示小时,n = A×24/B。 例如:sysdate - 1/6, 此处A = 1;B = 6。 n = 1×24/6 = 4 当前时间往前推 1 小时
-
A/B/C型 表示秒数 (24×60×A/B/C)
理解: A/B/C类型。则表示往前推 m 分钟,A表示天数,B表示小时,C表示分钟 例如:sysdate - 1/24/60,A=1,B=24,C=60 , 1.获取小时数 A×24/B 得到需要往前推多少小时, 2.获取分数 , 由步骤1可得 n = A×24/B,那么 m = n×60/C (1小时=60分钟,所以n小时要乘以60,再去除以C,得到往前推的分钟数) 即 select sysdate - 1/24/60 from dual 得出的时间是当前时间往前推1分钟