【PL/SQL】 常见日期归纳

看完这章你会学习到以下

  • 三种函数,To_char,Trunc, 日期函数等
  • 之间的差异和注意事项

1.Trunc 函数,按照第二参数相应截取日期

SELECT TRUNC(ADD_MONTHS(SYSDATE,3),'Q')-1 AS 本季度最后一天 FROM DUAL;  -- 本季度的最后一天
SELECT TRUNC(SYSDATE,'q') AS 本季度第一天 FROM DUAL;                  -- 本季度的第一天

SELECT TRUNC(SYSDATE,'Y') AS 本年的第一天 FROM DUAL;                    --- 本年的第一天
SELECT TRUNC(ADD_MONTHS(SYSDATE,12),'Y')-1 AS 半年最后一天 FROM DUAL;   --- 本年最后一天

SELECT TRUNC(SYSDATE,'MM') FROM DUAL;      --- 本月的第一天
SELECT TRUNC(ADD_MONTHS(SYSDATE,1),'MM')-1 FROM DUAL;  --- 本月的最后一天
      
SELECT TRUNC(SYSDATE,'D') FROM DUAL;       --- 西方以周日为起点 周日
SELECT TRUNC(SYSDATE,'D')+1 FROM DUAL;     --- 中国以周一为起点 周一
SELECT TRUNC(SYSDATE,'D')+7 FROM DUAL;     --- 本周的周末

注意事项
日期函数截取之后,还是日期函数,不会更改格式
下面结果中的下三角箭头就代表可以返回日期格式。


2.To_Char 函数,将所有格式都转换为字符串格式。

SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH:MI:SS') FROM DUAL;
SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD HH24:MI:SS') FROM DUAL;   --- 如果不加24,就默认是12小时制度
SELECT TO_CHAR(SYSDATE,'YYYYMM') FROM DUAL;
SELECT TO_CHAR(SYSDATE,'DDD') FROM DUAL;     --- 本年至今天数
SELECT TO_CHAR(SYSDATE,'DD') FROM DUAL;      --- 本月至今天数
SELECT TO_CHAR(SYSDATE,'D') FROM DUAL;       --- 本周至今天数 (西方按照星期日作为起点)
SELECT TO_CHAR(SYSDATE,'Q') FROM DUAL ;   ----- 当前季度
SELECT TO_CHAR(SYSDATE,'MM') FROM DUAL ;  ----- 当前月份
SELECT TO_CHAR(SYSDATE,'WW') 当前周数 FROM DUAL; ---- 当前周数


3.日期函数

ADD_MONTHS,MONTHS_BETWEEN;
NEXT_DAY,LAST_DAY

SELECT LAST_DAY(ADD_MONTHS(SYSDATE,-1)) FROM DUAL  ---- 上个月最后一日
SELECT MONTHS_BETWEEN(SYSDATE,DATE'2019-02-13') FROM DUAL   ---- 两个时间段间的月差距

SELECT NEXT_DAY(SYSDATE,1) FROM DUAL;      ---- 明天
SELECT NEXT_DAY(SYSDATE,2) FROM DUAL;      ---- 后天
SELECT SYSDATE - 1 FROM DUAL;    --- 昨天
SELECT SYSDATE - 2 FROM DUAL;   --- 前天


SELECT NEXT_DAY(SYSDATE, '星期一') FROM DUAL;   -- 下一个星期一日期
SELECT NEXT_DAY(SYSDATE, '星期二') FROM DUAL;   -- 下一个星期二日期
SELECT NEXT_DAY(SYSDATE, '星期三') FROM DUAL;   -- 下一个星期三日期
SELECT NEXT_DAY(SYSDATE, '星期四') FROM DUAL;   -- 下一个星期四日期
SELECT NEXT_DAY(SYSDATE, '星期五') FROM DUAL;   -- 下一个星期五日期
SELECT NEXT_DAY(SYSDATE, '星期六') FROM DUAL;   -- 下一个星期六日期
SELECT NEXT_DAY(SYSDATE, '星期日') FROM DUAL;   -- 下一个星期日日期

注意事项:
在用时间函数,Next_day的时候,_当当前是星期X,
则Next_DAY会返回本周星期X+1。

--- 如果SYSDATE的日期是星期X,
则NEXT_DAY的星期X+1是返回本周的日期

SELECT SYSDATE AS 当前日期,
NEXT_DAY(SYSDATE,'星期日') AS 下一个周日日期 FROM DUAL;


蜗牛
27 声望13 粉丝