Oracle日期处理整理

1.获取日期元素

注意:
1.hh24写法指24小时,Oracle默认是12小时
2.分钟用mi,不要用mm,因为与之前的MM冲突
    1-12小时写法 yyyyMMdd24miss(Oracle默认)
    1-24小时写法 yyyyMMddHH24miss
获取日期元素:
select to_char(sysdate,‘yyyy-mm-dd hh24:mi:ss’) from dual; //日期转化为字符串
select to_char(sysdate,‘yyyy’) from dual; //获取时间的年
select to_char(sysdate,‘mm’) from dual; //获取时间的月
select to_char(sysdate,‘dd’) from dual; //获取时间的日
select to_char(sysdate,‘hh24’) from dual; //获取时间的时
select to_char(sysdate,‘mi’) from dual; //获取时间的分
select to_char(sysdate,‘ss’) from dual; //获取时间的秒

– 获取当前时间为哪一周
select to_char(sysdate,‘w’) from dual;

– 获取指定时间为哪一周
select to_char(to_date(‘20200805’,‘yyyy-mm-dd hh24:mi:ss’),‘w’) FROM dual;

2.日期转换

系统当前时间SYSDATE: ‘2020/8/3 16:26:52’;
select to_char(SYSDATE,‘yyyyMMddHH24miss’) from dual;
select to_date(‘20200803140816’,‘yyyyMMddHH24miss’) from dual;
select to_date(‘2020-08-03 00:00:00’,‘yyyy-mm-dd hh24:mi:ss’) FROM dual;

3.trunc:截断到最接近的日期,单位为天

select trunc(sysdate, ‘mm’) from dual – 返回当月第一天.
select trunc(sysdate,‘yy’) from dual – 返回当年第一天
select trunc(sysdate,‘dd’) from dual --返回当前年月日
select trunc(sysdate,‘yyyy’) from dual --返回当年第一天
select trunc(sysdate,‘d’) from dual --返回当前星期的第一天:星期天
select trunc(sysdate, ‘hh’) from dual --返回当前小时时间
select trunc(sysdate, ‘mi’) from dual --TRUNC()函数没有秒的精确

select trunc(to_date(last_day(sysdate))) + (8****60+30)/ (24**60) from dual;–获取当前月最后一天2020/8/31 8:30:00
select trunc(sysdate+1) + (8 * 60+30) / (24 * 60) from dual;–获取下一天的8点半日期2020/8/4 8:30:00

4.日期加减

加:
select sysdate,add_months(sysdate,12) from dual; --加1年
select sysdate,add_months(sysdate,1) from dual; --加1月
select sysdate,to_char(sysdate+7,‘yyyy-mm-dd HH24:MI:SS’) from dual; --加1星期
select sysdate,to_char(sysdate+1,‘yyyy-mm-dd HH24:MI:SS’) from dual; --加1天
select sysdate,to_char(sysdate+1/24,‘yyyy-mm-dd HH24:MI:SS’) from dual; --加1小时
select sysdate,to_char(sysdate+1/24/60,‘yyyy-mm-dd HH24:MI:SS’) from dual; --加1分钟
select sysdate,to_char(sysdate+1/24/60/60,‘yyyy-mm-dd HH24:MI:SS’) from dual; --加1秒

减:
select sysdate,add_months(sysdate,-12) from dual; --减1年
select sysdate,add_months(sysdate,-1) from dual; --减1月
select sysdate,to_char(sysdate-7,‘yyyy-mm-dd HH24:MI:SS’) from dual; --减1星期
select sysdate,to_char(sysdate-1,‘yyyy-mm-dd HH24:MI:SS’) from dual; --减1天
select sysdate,to_char(sysdate-1/24,‘yyyy-mm-dd HH24:MI:SS’) from dual; --减1小时
select sysdate,to_char(sysdate-1/24/60,‘yyyy-mm-dd HH24:MI:SS’) from dual; --减1分钟
select sysdate,to_char(sysdate-1/24/60/60,‘yyyy-mm-dd HH24:MI:SS’) from dual; --减1秒

5.round:返回指定的小数位元数进行四舍五入运算的结果

select round(123.456, 0) from dual; 回传 123
select round(123.456, 1) from dual; 回传 123.5
select round(123.456, 2) from dual; 回传 123.46
select round(123.456, 3) from dual; 回传 123.456
select round(-123.456, 2) from dual; 回传 -123.46

6.计算时间差

注:oracle时间差是以天数为单位,所以换算成年月,日
select floor(to_number(sysdate-to_date(‘2020-08-03 18:25:03’,‘yyyy-mm-dd hh24:mi:ss’))/365) as spanYears from dual //时间差-年
select ceil(moths_between(sysdate-to_date(’‘2020-08-03 18:25:03’,‘yyyy-mm-dd hh24:mi:ss’))) as spanMonths from dual //时间差-月
select floor(to_number(sysdate-to_date(’‘2020-08-03 18:25:03’,‘yyyy-mm-dd hh24:mi:ss’))) as spanDays from dual //时间差-天
select floor(to_number(sysdate-to_date(’‘2020-08-03 18:25:03’,‘yyyy-mm-dd hh24:mi:ss’))24) as spanHours from dual //时间差-时
select floor(to_number(sysdate-to_date(’‘2020-08-03 18:25:03’,‘yyyy-mm-dd hh24:mi:ss’))2460) as spanMinutes from dual //时间差-分
select floor(to_number(sysdate-to_date(’‘2020-08-03 18:25:03’,‘yyyy-mm-dd hh24:mi:ss’))2460
60) as spanSeconds from dual //时间差-秒

7.定时器用到的时间

1、 每分钟执行

Interval => TRUNC(sysdate,’mi’) + 1 / (24*60)

2、 每天定时执行

例如:每天的凌晨2点执行

Interval => TRUNC(sysdate) + 1 +2 / (24)

3、 每周定时执行

例如:每周一凌晨2点执行

Interval => TRUNC(next_day(sysdate,2))+2/24 --星期一,一周的第二天

4、 每月定时执行

例如:每月1日凌晨2点执行

Interval =>TRUNC(LAST_DAY(SYSDATE))+1+2/24

5、 每季度定时执行

例如每季度的第一天凌晨2点执行

Interval => TRUNC(ADD_MONTHS(SYSDATE,3),‘Q’) + 2/24

6、 每半年定时执行

例如:每年7月1日和1月1日凌晨2点

Interval => ADD_MONTHS(trunc(sysdate,‘yyyy’),6)+2/24

7、 每年定时执行

例如:每年1月1日凌晨2点执行

Interval =>ADD_MONTHS(trunc(sysdate,‘yyyy’),12)+2/24

荐:
ORACLE日期时间函数大全
oracle中常用的时间格式转换

猜你喜欢

转载自blog.csdn.net/qq_38425803/article/details/107769579