Oracle日期函数to_date()

272 阅读2分钟

一、基础

--年 yyyy yyy yy year

--月 month mm mon month

--日+星期 d(当周第几天) dd(当月第几天) ddd(当年第几天) dy/day(星期几)

--小时 hh hh24

--分 mi

--秒 ss

SELECT TO_CHAR(SYSDATE,'ss') FROM DUAL;--取当前时间秒部分

SELECT TO_CHAR(SYSDATE,'mi') FROM DUAL;--取当前时间分钟部分

SELECT TO_CHAR(SYSDATE,'hh24') FROM DUAL;--取当前时间秒小时部分

SELECT TO_CHAR(SYSDATE,'dd') FROM DUAL;--取当前时间日期部分(当月第几天)

SELECT TO_CHAR(SYSDATE,'d') FROM DUAL;--取当前时间是一周的第几天(1:周日;2:周一;3:周二;...7:周六)

SELECT TO_CHAR(SYSDATE,'ddd') FROM DUAL;--当前日是一年中的第几天

SELECT TO_CHAR(SYSDATE,'mm') FROM DUAL;--取当前时间月部分

SELECT TO_CHAR(SYSDATE,'yyyy') FROM DUAL;--取当前时间年部分

SELECT TO_CHAR(SYSDATE,'w') FROM DUAL;--取当前时间是一个月中的第几周(从1日开始算,周六开始)

SELECT TO_CHAR(SYSDATE,'ww') FROM DUAL;--取当前时间是一年中的第几周(从1.1开始算)

SELECT TO_CHAR(SYSDATE,'iw') FROM DUAL;--取当前时间是一年中的第几周(按实际日历的)

SELECT TO_CHAR(SYSDATE,'day') W1,TO_CHAR(SYSDATE,'day','NLS_DATE_LANGUAGE=American') W2 FROM DUAL;--取当前日是星期几,和数据库设置的字符集有关,设置语言会输出'tuesday

SELECT TO_CHAR(TO_DATE('20200908','yyyymmdd'),'yyyy/fmmm/dd') VAL FROM DUAL;--月份和天数不带0

--add_months 增加月份

select add_months(sysdate,12) newtime from dual;

--months_between

select months_between(to_date('03-31-2014','MM-DD-YYYY'),to_date('12-31-2013','MM-DD-YYYY')) "MONTHS" FROM DUAL;

--next_day

select sysdate today, next_day(sysdate,6) nextweek from dual;--下个周几(1:周日;2:周一;3:周二;...7:周六)

二、扩展

--本周一,本周日

SELECT TRUNC(NEXT_DAY(SYSDATE-8,1)+1) CUR_MON,TRUNC(NEXT_DAY(SYSDATE-8,1)+7) CUR_SUN FROM DUAL;

--当月每天是第几周

SELECT TO_CHAR(DT,'yyyy-mm-dd') DT,'Week'||(TO_CHAR(DT,'IW')-TO_CHAR(TRUNC(DT,'MM'),'IW')+1) WK FROM (
SELECT ADD_MONTHS(TRUNC(SYSDATE,'mm'),1)-LEVEL DT 
FROM DUAL CONNECT BY LEVEL<=(ADD_MONTHS(TRUNC(SYSDATE,'mm'),1)-TRUNC(SYSDATE,'mm')));

--某月每天是第几周

SELECT TO_CHAR(DT,'yyyy-mm-dd') DT,'Week'||(TO_CHAR(DT,'IW')-TO_CHAR(TRUNC(DT,'MM'),'IW')+1) WK FROM (
SELECT ADD_MONTHS(TRUNC(TO_DATE('2023-03-01','yyyy-mm-dd'),'mm'),1)-LEVEL DT 
FROM DUAL CONNECT BY LEVEL<=(ADD_MONTHS(TRUNC(TO_DATE('2023-03-01','yyyy-mm-dd'),'mm'),1)-TRUNC(TO_DATE('2023-03-01','yyyy-mm-dd'),'mm')));