Oracle SQL 日期函数
当前日期
1. 返回格式为默认的日期格式
[返回值] 2022-01-11 09:32:36 date格式
SELECT SYSDATE FROM DUAL;
2. 返回格式为YYYY-MM-DD HH24:MI:SS
[返回值] 2022-01-11 09:32:36 char格式
SELECT SYSDATE, TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
3. 返回格式为YYYYMMDDHH24MISS
[返回值] 20220111093236 char格式
SELECT SYSDATE, TO_CHAR(SYSDATE,'YYYYMMDDHH24MISS') FROM DUAL;
4. 时间间隔
[返回值] 2022-01-12 09:32:36
[返回值] 2022-01-11 10:32:36
[返回值] 2022-01-11 09:33:36
[返回值] 2022-02-11 09:32:36
[返回值] 34.33721960872162485065710872162485065711 NUMBER格式
[返回值] -34.33721960872162485065710872162485065711
[返回值] 1047.455069444444444444444444444444444444 NUMBER 格式
SELECT SYSDATE+1 FROM DUAL // 相加一天,如果是减去一天 则修改为-1
SELECT SYSDATE+1/24 FROM DUAL // 相加一小时
SELECT SYSDATE+1/24/60 FROM DUAL // 相加一分钟
SELECT ADD_MONTHS(SYSDATE,1) FROM DUAL; // 相加一个月,如果是减去一个月,则修改为-1
SELECT MONTHS_BETWEEN(SYSDATE, TO_DATE('2019-03-01','YYYY-MM-DD')) FROM DUAL;
SELECT MONTHS_BETWEEN(TO_DATE('2019-03-01','YYYY-MM-DD'), SYSDATE) FROM DUAL; //写反了是负的
SELECT SYSDATE - TO_DATE('2019-03-01','YYYY-MM-DD') FROM DUAL; //相差多少天
截取年月日
[返回值] 2022
[返回值] 01
[返回值] 11
SELECT TO_CHAR(SYSDATE,'YYYY') FROM DUAL; // 年
SELECT TO_CHAR(SYSDATE,'MM') FROM DUAL; // 月
SELECT TO_CHAR(SYSDATE,'DD') FROM DUAL; // 日
截取时分秒
[返回值] 09
[返回值] 32
[返回值] 36
SELECT TO_CHAR(SYSDATE,'HH24') FROM DUAL; // 时
SELECT TO_CHAR(SYSDATE,'HH') FROM DUAL;
SELECT TO_CHAR(SYSDATE,'MI') FROM DUAL; // 分
SELECT TO_CHAR(SYSDATE,'SS') FROM DUAL; // 秒
Trunc截取时间
把时分秒设置为00:00:00, 只留下年月日
[返回值] 2022-01-11 00:00:00 date格式
SELECT TRUNC(SYSDATE) FROM DUAL
当前季度
[返回值] 1
SELECT TO_CHAR(SYSDATE,'Q') FROM DUAL
当周星期几
[返回值] TUESDAY
SELECT TO_CHAR(SYSDATE, 'DAY') FROM DUAL;
当年第几天
[返回值] 011
SELECT TO_CHAR(SYSDATE,'DDD') FROM DUAL;
当年第几周
查看日期属于一年第几周,每年1月1日算第一周的开始
[返回值] 02
SELECT TO_CHAR(TO_DATE('2022-01-11', 'yyyy-mm-dd'),'ww') FROM DUAL;
SELECT TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'YYYY-MM-DD'), 'YYYY-MM-DD'),'WW') FROM DUAL;
查看日期属于一年第几周,按星期一到星期日算一周
[返回值] 02
SELECT TO_CHAR(TO_DATE('2022-01-11', 'yyyy-mm-dd'),'iw') FROM DUAL;
SELECT TO_CHAR(TO_DATE(TO_CHAR(SYSDATE, 'YYYY-MM-DD'), 'YYYY-MM-DD'),'IW') FROM DUAL;
当月最后一天
注意:这里的时分秒 不会被设置为23:59:59
[返回值] 2022-01-31 09:32:36 date格式
SELECT LAST_DAY(SYSDATE) FROM DUAL
当月最后一刻
[返回值] 2022-01-31 23:59:59 date格式
SELECT LAST_DAY(TRUNC(SYSDATE))+1 - 1/24/60/60 FROM DUAL
下月月初开始的时刻
[返回值] 2022-02-01 00:00:00 date格式
SELECT LAST_DAY(TRUNC(SYSDATE))+1 FROM DUAL
下周的第几天
注意:西方国家将星期日作为第一天
[返回值] 2022-01-16 09:32:36 date格式
[返回值] 2022-01-17 09:32:36 date格式
[返回值] 2022-01-17 09:32:36 date格式
SELECT NEXT_DAY(SYSDATE,1) FROM DUAL // 1 代表下周的第一天
ALTER SESSION SET NLS_DATE_LANGUAGE = 'American';
SELECT NEXT_DAY(SYSDATE,'monday') FROM DUAL
ALTER SESSION SET NLS_DATE_LANGUAGE = 'SIMPLIFIED CHINESE';
SELECT NEXT_DAY(SYSDATE,'星期一') FROM DUAL
\