日期转换函数

  • --时间格式
1   --yyyy-MM-dd HH:mi:ss
2   --HH默认24小时制 1-23:59:59
3   --HH12表示12小时制 1-12
  • --to_char()将日期转换成字符串
1   select sysdate from dual;
2   select to_char(sysdate,'yyyy-MM-dd HH:mi:ss') from dual;
  • --to_date()将字符串转换成日期
1 select to_date('2019-12-12','yyyy-MM-dd HH:mi:ss') from dual;
2 select * from ttt_demo01;
3 insert into ttt_demo01 values(102,'scott',200.99,to_date('1992-11-2','yyyy-MM-dd HH:mi:ss'));
  • --转换含有数字的字符串
1 select to_number('1233.456') from dual; 
2 SELECT TO_TIMESTAMP('2016-12-12 12:23:34', 'YYYY-MM-DD HH:MI:SS') FROM DUAL;
3 --添加了时区
4 SELECT TO_TIMESTAMP_TZ('2016-12-12 12:23:34 8:00', 'YYYY-MM-DD HH24:MI:SS TZH:TZM') FROM DUAL;

---日期操作函数

--截取目标日期里的时间,比如获取当前系统时间的年、月、日
--注意在截取当前系统时间的年月日,可以直接写成 year/month/day from sysdate
--但是hour minute second不可以这么写,需要先转换成字符串,再转换成日期

1   select extract( year from sysdate) from dual;
2   select extract( month from sysdate) from dual;
3   select extract( day from sysdate) from dual;
4 
5   select extract( second from to_timestamp(to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS')) from dual;
6 
7   select extract(hour from TO_TIMESTAMP('2016-12-12 12:23:34', 'YYYY-MM-DD HH24:MI:SS')) from dual;
8   select extract(minute from TO_TIMESTAMP('2016-12-12 12:23:34', 'YYYY-MM-DD HH24:MI:SS')) from dual;
9   select extract(second from TO_TIMESTAMP('2016-12-12 12:23:34', 'YYYY-MM-DD HH24:MI:SS')) from dual;

--计算月差:两个日期之间相差的月数
--注意:计算结果是第一个参数减第二个参数
  select months_between(sysdate,to_date('1995-11-11','YYYY-MM-DD HH:mi:ss'))from dual;

  select months_between
  (to_date('1980-11-1','YYYY-MM-DD HH:mi:ss'),
  to_date('1995-11-11','YYYY-MM-DD HH:mi:ss'))from dual;

  • --添加月数

  select add_months(sysdate,2)from dual;
  select add_months(to_date('2017-11-1','YYYY-MM-DD HH:mi:ss'),-13)from dual;

  • --获取当前系统时间以后的时间(星期)

  --一周的组合以下周的日期(本周已过的日期或者正在过的日期)
  --和本周的日期(本周还未过的日期)加起来
  select next_day(sysdate,'Monday') from dual;--下周一
  select next_day(sysdate,'Tuesday') from dual;--下周二
  select next_day(sysdate,'Wednesday') from dual;--下周三
  select next_day(sysdate,'Thursday') from dual;--本周四
  select next_day(sysdate,'Friday') from dual;--本周五
  select next_day(sysdate,'Saturday') from dual;--本周六
  select next_day(sysdate,'Sunday') from dual;--本周日

  • --每个月的最后一天

  select last_day(sysdate)from dual;
  select last_day(to_date('2016-2-1','YYYY-MM-DD'))from dual;

  • --对日期的四舍五入

  select round(sysdate,'year') from dual;
  select round(sysdate,'month') from dual;

  • --对年的四舍五入 分界点是6月和7月

  select round(to_date('2017-6-1','YYYY-MM-DD'),'year') from dual;
  select round(to_date('2017-7-1','YYYY-MM-DD'),'year') from dual;

  • --对月的四舍五入 分界点是15日和16日

  select round(to_date('2017-6-1','YYYY-MM-DD'),'month') from dual;
  select round(to_date('2017-6-15','YYYY-MM-DD'),'month') from dual;
  select round(to_date('2017-6-16','YYYY-MM-DD'),'month') from dual;

  select round(to_date('2016-2-15','YYYY-MM-DD'),'month') from dual;
  select round(to_date('2016-2-16','YYYY-MM-DD'),'month') from dual;

  • --截取日期

  --此处的day表示星期几
  --获取离当前时间最近的星期日(已经过了的)
  select trunc(sysdate,'day')from dual;

  • --获取年初

  select trunc(to_date('2017-5-5','yyyy-MM-dd'),'year')from dual;
  select trunc(to_date('2016-5-5','yyyy-MM-dd'),'year')from dual;

原文地址:https://www.cnblogs.com/chen8023miss/p/11229651.html