oracle对时间的操作,Oracle中常用时间操作的汇总

本文详细介绍了Oracle数据库中对日期和时间的操作,包括获取当前日期时间、计算前后时间、日期转换、时间差计算以及时间更新等。通过示例展示了如何获取前一天、前一小时、前一分钟的时间,以及前一月、年前的时间。此外,还涉及了日期与字符串之间的转换,以及查询特定时间范围内的记录。同时,文章解释了如何计算两个日期之间的天数、年数、月数、小时数等时间差,并提供了更新时间的方法。
摘要由CSDN通过智能技术生成

1、oracle 取当前日期时间的前一天前一小时前一分钟前一秒

SELECT '当前时间' TITLE, TO_CHAR(SYSDATE, 'yyyy-mm-dd hh24:mi:ss') TIME

FROM DUAL

UNION ALL

SELECT '前一天前一小时前一分钟前一秒' TITLE,

TO_CHAR(SYSDATE - 1 - 1 / 24 - 1 / 24 / 60 - 1 / 24 / 60 / 60,

'yyyy-mm-dd hh24:mi:ss') TIME

FROM DUAL

UNION ALL

SELECT '一分钟前' TITLE,

TO_CHAR(SYSDATE - 1 / 24 / 60, 'yyyy-mm-dd hh24:mi:ss')

FROM DUAL;

结果:

0818b9ca8b590ca3270a3433284dd417.png

2、oracle取当前时间的前一个月前一年

select sysdate as "当前时间",

add_months(sysdate, -1) as "一个月前时间",

add_months(sysdate, -12) as "一年前时间"

from dual;

结果:

0818b9ca8b590ca3270a3433284dd417.png

3、某个时间之后10的时间是

select to_date('2015-10-16 14:33:27', 'yyyy-MM-dd HH24:mi:ss') + 10

from dual;

4、系统时间(sysdate)的相关操作

sysdate+(5/24/60/60) 在系统时间基础上延迟5秒

sysdate+5/24/60 在系统时间基础上延迟5分钟

sysdate+5/24 在系统时间基础上延迟5小时

sysdate+5 在系统时间基础上延迟5天

add_months(sysdate,-5) 在系统时间基础上延迟5月

add_months(sysdate,-5*12) 在系统时间基础上延迟5年

5、查询10分钟,1天前,6个小时前,1分钟前的记录

--查询10分钟前的记录

select * from sq_leavemessage m where sysdate-m.createtime<=10/60/24;

--1天前创建的产品

select pv.create_time from product_version pv where round(to_number(sysdate-pv.create_time))<=1;

--6小时前创建的产品

select pv.create_time from product_version pv where round(to_number(sysdate-pv.create_time)*24)<=6;

--1分钟前创建的产品

select pv.create_time from product_version pv where round(to_number(sysdate-pv.create_time)*1440)<=1;

6、日期和字符串之间的转换(to_date(),to_char())

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual; //日期转化为字符串

select to_char(sysdate,'yyyy') as nowYear from dual; //获取时间的年

select to_char(sysdate,'mm') as nowMonth from dual; //获取时间的月

select to_char(sysdate,'dd') as nowDay from dual; //获取时间的日

select to_char(sysdate,'hh24') as nowHour from dual; //获取时间的时

select to_char(sysdate,'mi') as nowMinute from dual; //获取时间的分

select to_char(sysdate,'ss') as nowSecond from dual; //获取时间的秒

select to_date('2004-05-07 13:23:44','yyyy-mm-dd hh24:mi:ss') from dual//

7、求某天是星期几

select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual; 星期一 select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual; monday 设置日期语言 ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN'; 也可以这样 TO_DATE ('2002-08-26', 'YYYY-mm-dd', 'NLS_DATE_LANGUAGE = American')

8、两个日期间的天数

select floor(sysdate - to_date('20150508','yyyymmdd')) from dual;

9、计算时间差

注:oracle时间差是以天数为单位,所以换算成年月,日

select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))/365) as spanYears from dual //时间差-年

select ceil(moths_between(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))) as spanMonths from dual //时间差-月

select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))) as spanDays from dual //时间差-天

select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24) as spanHours from dual //时间差-时

select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24*60) as spanMinutes from dual //时间差-分

select floor(to_number(sysdate-to_date('2007-11-02 15:55:03','yyyy-mm-dd hh24:mi:ss'))*24*60*60) as spanSeconds from dual //时间差-秒

10、更新时间

注:oracle时间加减是以天数为单位,设改变量为n,所以换算成年月,日

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n*365,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改变时间-年

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),add_months(sysdate,n) as newTime from dual //改变时间-月

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改变时间-日

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改变时间-时

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24/60,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改变时间-分

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'),to_char(sysdate+n/24/60/60,'yyyy-mm-dd hh24:mi:ss') as newTime from dual //改变时间-秒

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值