2020-10-20 oracle sql查询近期时间的几种方法 (解决报错ORA-01873)

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值