日期型函数
日期型函数
1、to_date/to_char
TO_DATE(str,‘YYYY/MM/DD’):将字符串形式的日期转化成日期型的日期
TO_CHAR(date1,‘YYYY/MM/DD’):将日期形式的日期转化成字符型的日期
示例:
SELECT TO_DATE(SYSDATE,‘YYYY/MM/DD’) FROM DUAL;–报错 SELECT
TO_CHAR(‘2021/01/15’,‘YYYY/MM/DD’) FROM DUAL;–报错 无效数字
注意:
1).TO_DATE()转换的数据不能为日期型数据
2).TO_CHAR()转换的数据不能为字符型的数据
2.SYSDATE
A.数据库当前的系统时间 含有 年月日 时分秒
B.函数可以进行运算 ,小数按照24小时划分计入到运算结果中
示例:
SELECT SYSDATE FROM DUAL;
SELECT SYSDATE+1 FROM DUAL;--增加天数
SELECT SYSDATE+13 FROM DUAL;--整数 增加天数
SELECT SYSDATE+1.5 FROM DUAL;--小数按照24小时划分
SELECT SYSDATE+1/24 FROM DUAL;
SELECT SYSDATE+1/24/60 FROM DUAL;
3.MONTHS_BETWEEN(D1,D2)
求D1和D2之间相差几个月(d1>d2)否则值为负,返回的为一数值
注意:
A.不足整月,除以31以小数显示
B.月末日期用函数处理,返回整数
示例:
1).查询至今2021年已过几个月
SELECT MONTHS_BETWEEN(TO_DATE('2021/01/01','YYYY/MM/DD'),SYSDATE) FROM DUAL;--结果为负
SELECT MONTHS_BETWEEN(SYSDATE,TO_DATE('2021/01/01','YYYY/MM/DD')) FROM DUAL;--结果为正
SELECT MONTHS_BETWEEN(TO_DATE('2021/01/19','YYYY/MM/DD'),TO_DATE('2021/01/01','YYYY/MM/DD')) FROM DUAL;
2).查询一月31号至二月28号相差几个月
SELECT MONTHS_BETWEEN(TO_DATE('2021/02/28','YYYY/MM/DD'),TO_DATE('2021/01/31','YYYY/MM/DD')) FROM DUAL;
4.LAST_DAY(DATE1)
获取指定日期对应的当月最后一天,即月末日期
示例:
1).获取当月最后一天的日期
SELECT LAST_DAY(SYSDATE) FROM DUAL;
2).判断指定日期的闰年平年
–二月的最后一天是28、29
–整百年/400 非整百年/4 1900
5.ADD_MONTHS(DATE1,N)
在DATE1日期的基础上加N个月。N可为正可为负
注意:
A.N为正增加月数,N为负减少月数
B.当N为小数时,自动取整数位数值
C.若处理的日期为月末日期,返回处理后的月末日期,若处理后的日期中无当下日期,则返回月末日期
示例:
1).N为正增加月数
SELECT ADD_MONTHS(SYSDATE,1) FROM DUAL;
2).N为负减少月数
SELECT ADD_MONTHS(SYSDATE,-1) FROM DUAL;
3).N为小数 向下取整
SELECT ADD_MONTHS(SYSDATE,1.5) FROM DUAL; --2021/02/19
SELECT ADD_MONTHS(SYSDATE,1.9) FROM DUAL; --2021/02/19
SELECT ADD_MONTHS(SYSDATE,1.4) FROM DUAL; --2021/02/19
N为负小数 向上取整
SELECT ADD_MONTHS(SYSDATE,-1.5) FROM DUAL;
SELECT ADD_MONTHS(SYSDATE,-1.9) FROM DUAL;
–小数直接TRUNC(N)
4). ADD_MONTHS()函数针对月份的加减
SELECT ADD_MONTHS(SYSDATE,12) FROM DUAL;
SELECT ADD_MONTHS(TO_DATE('2020/03/30','YYYY/MM/DD'),2) FROM DUAL;--2020/05/30
SELECT ADD_MONTHS(TO_DATE('2020/03/30','YYYY/MM/DD'),-1) FROM DUAL;--2020/02/29
SELECT ADD_MONTHS(TO_DATE('2020/02/29','YYYY/MM/DD'),2) FROM DUAL;--2020/04/30
6.NEXT_DAY(DATE1,W)
NEXT_DAY(D,W):给定日期D,在本周内就获取本周的第W天的日期,
不在本周就获取在下一周的第W天的日期
NEXT_DAY(D,W):给定日期D,在本周内就获取本周星期W的日期,
不在本周就获取在下一周星期W的日期
示例:
1).获取下一个周二的日期
SELECT NEXT_DAY(SYSDATE,'星期二') FROM DUAL;
SELECT NEXT_DAY(SYSDATE,3) FROM DUAL;
2).获取下一个周三的日期
SELECT NEXT_DAY(SYSDATE,'星期三') FROM DUAL;
SELECT NEXT_DAY(SYSDATE,4) FROM DUAL;
7.小结
1).SYSDATE
2).MONTH_BETWEEN(D1,D2)
D2<D1,否则返回负数
该函数含有两个参数,均为日期型数据
3).LAST_DAY(D1)
–返回当前月份的最后一天的日期
4).ADD_MONTHS(D1,N)
两个参数:一个日期型,一个数字
5).NEXT_DAY(D1,W)
–返回下一个W的日期
W为数字:在本周内 返回本周第W天的日期,否则返回下一周第W天的日期(以周天为第一天)
W为星期W:在本周内 返回本周W的日期,否则返回下一周W的日期(以周天为第一天)