Oracle 对于时间的查询
查询当前时间 :
select sysdate from dual --dual为数据库的虚拟表,为了满足from的格式
假设存在表 test_table ( id varchar(50) ,name varchar(50),createtime date )
表中简单三个字段 id 、name、createtime,分别为varchar、varchar、date类型。
1. 利用 -interval ‘num’ 单位
注意:num的数字限制在-99到99之间,比如要查询180天,是 interval’180’ day,这样写 会报错ORA-01873 ,需要解决这个问题有两种方式 ,一个是 将day 换算为月, interval’6’ month ,另一种是讲interval的限制改为4位,默认为2位,所以大小限制为-99 到 99 ,改为4位为 interval’180’day(4),这样一来数字的大小限制为-9999到9999.
最好换算成月来计算
查询 当前时间减去 5 分钟 的时间
select sysdate - interval ‘5’ MINUTE from dual
查询当前时间减去5小时的时间
select sysdate - interval ‘5’ hour from dual
查询当前时间减去5天的时间
select sysdate - interval ‘5’ day from dual
查询当前时间减去5月的时间
select sysdate - interval ‘5’ month from dual
查询当前时间减去5年的时间
select sysdate - interval ‘5’ year from dual
查询当前时间减去十年的时间 (可以在原有的interval前面做运算)
select sysdate - 2* interval ‘5’ year from dual
查询test_table createtime十天内的数据
select id,name,createtime from test_table where
createtime >= sysdate - interval'10' day
查询其他时间段的时间与上面同理,只需要改变时间间隔就可以了。
2. 直接相减 默认单位为day
查询test_table createtime十天内的数据
select id,name,createtime from test_table where sysdate - createtime<=10
查询5分钟内的数据
select id,name,createtime from test_table where (sysdate - createtime)*24*60 <=5
3.日期格式参数含义说明
D
一周中的星期几
DAY
天的名字,使用空格填充到9个字符
DD
月中的第几天
DDD
年中的第几天
DY
天的简写名
IW
ISO标准的年中的第几周
IYYY
ISO标准的四位年份
YYYY
四位年份
YYY,YY,Y
年份的最后三位,两位,一位
HH
小时,按12小时计
HH24
小时,按24小时计
MI
分
SS
秒
MM
月
Mon
月份的简写
Month
月份的全名
W
该月的第几个星期
WW
年中的第几个星期
4.日期到字符操作
select sysdate,to_char(sysdate,‘yyyy-mm-dd hh24:mi:ss’) from dual
select sysdate,to_char(sysdate,‘yyyy-mm-dd hh:mi:ss’) from dual
select sysdate,to_char(sysdate,‘yyyy-ddd hh:mi:ss’) from dual
select sysdate,to_char(sysdate,‘yyyy-mm iw-d hh:mi:ss’) from dual
5. 字符串到日期操作
select to_date('2020-10-20 21:15:37','yyyy-mm-dd hh24:mi:ss') from dual
6. trunc/ ROUND函数的使用
select trunc(sysdate ,'YEAR') from dual --截取本年年初的时间,返回的时间为当前年 1月1日0点0分0秒( 2020-01-01 00:00:00 )
select trunc(sysdate ) from dual --不加参数默认截取当天数据,返回的时间的当前日期0点0分...( 2020-10-20 00:00:00 )
--round 用法与trunc类似,但是round是四舍五入,trunc是直接截断.两者返回的对象都是date类型
select round(sysdate,'year') from dual --当前时间是2020年 12月10号,如果使用trunc查出来是(2020-01-01 00:00:00) 使用round则会查出(2021-01-01 00:00:00);
select round(to_number(sysdate-date1) ) from users --计算users表里date1字段距离现在的时间差,默认单位是天,round会四舍五入计算整天数,如果要计算小时或者分钟,就在to_number后面*24或者*24*60.
select to_char(sysdate ,‘YYYY’) from dual --查询当前年 (2020)
参考文档
https://www.jb51.net/article/124954.htm