Oracle SQL 学习笔记2

154 阅读3分钟

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; // 相加一个月,如果是减去一个月,则修改为-1SELECT 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 

\