看完这章你会学习到以下
- 三种函数,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;