日期型函数

日期型函数

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的日期(以周天为第一天)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值