日期差值
返回的是数值格式
年月差
月差:MONTHS_BETWEEN()
年差:MONTHS_BETWEEN()/12
MONTHS_BETWEEN(DATE1,DATE2):返回一个小数,获得两个日期之间差的 月数
- 要求
DATE1
>DATE2
,否则返回负数 DATE1
,DATE2
都是日期格式- DATE1和DATE2天一样的情况下才能返回整数
- 当两个日期
DD
都是月末的时候,返回的也会是整数 - 小数位是多出点几天除以31
--根据出生日期计算年龄
select sname,trunc(months_between(sysdate,to_date(sbirthday,'yyyy-mm-dd'))/12) from students
天数差
日期直接相减
小时差
想减之后除以24
日期加减
日期可以直接加减数,默认单位是天
日期之间只有减法没有加法,日期之间直接相减得到的是相差的天数
ADD_MONTHS()
- 在月份上对日期格式进行加减
- 也可以对年进行加减
- 不可以对天进行加减,因为每个月的天数不固定
add_months(date,n)
- date是日期格式
- n是月份加减数
- n为正,加月份
- n为负,减月份
add_months(sysdate,1)---------------加一月
add_months(sysdate,1*12)------------加一年
- n为负,减月份
- 月末加减返回的是还是月末
interval
可以在任意单位上加减数字
关键字:
year
month
day
hour
minute
second
select sysdate as 当前时间,
sysdate + interval '1' year as 加一年,
sysdate + interval '-1' year as 减一年,
sysdate + interval '1' month as 加一月,
sysdate + interval '1' day as 加一天,
sysdate + interval '1' hour as 加一小时,
sysdate + interval '1' minute as 加一分钟,
sysdate + interval '1' second as 加一秒
from dual;
日期转字符
获得日期格式中的信息
年月日
TO_CHAR(SYSDATE,‘YYYYMMDD’);
SYSDATE:当前时间
必须是日期格式,直接输入得不到日期格式,需要经过TO_DATE()转化
SELECT TO_CHAR(TO_DATE('20221227','YYYYMMDD'),'YYYYMMDD')FROM DUAL;
季度
TO_CHAR(SYSDATE,‘Q’)
SELECT TO_CHAR(TO_DATE('20221227','YYYYMMDD'),'Q')FROM DUAL;
月份
- MONTH
会产生空格,补全9位
返回英文全称
SELECT TO_char(SYSDATE,'MONTH',NLS_DATE_LANGUAGE=AMERICAN);
- MON
返回英文三位缩写
SELECT TO_CHAR(SYSDATE,'MON',NLS_DATE_LANGUAGE=AMERICAN);
- MM
返回两位数
用于返回日期的月份
SELECT TO_CHAR(SYSDATE,'MM')FROM DUAL;
周
- WW
一年中的第几个星期,从一年中的第一天开始算起,一个七天算一周,和星期几无关
SELECT TO_CHAR(TO_DATE('20221227','YYYYMMDD'),'WW')FROM DUAL;
- IW
一年中的第几个星期,星期一为本周第一天,每年末最后一周不足四天算作本年,足四天算作来年的第一个周
SELECT TO_CHAR(TO_DATE('20221227','YYYYMMDD'),'IW')FROM DUAL;
- W
一个月中的第几个星期,七天为一个周,计数到具体日期共有几个周,不足一周也算作一周
若日期中只显示到月份,则默认是1
SELECT TO_CHAR(TO_DATE('20221227','YYYYMMDD'),W')FROM DUAL;
>>4
SELECT TO_CHAR(TO_DATE('202212','YYYYMM'),'W')FROM DUAL;
>>1
星期
- DAY
星期的全称
会存在空格,补全到9位
SELECT TO_CHAR(SYSDATE,'DAY','NLS_DATE_LANGUAGE=AMERICAN') FROM DUAL;
- DY
星期的三位缩写
SELECT TO_CHAR(SYSDATE,'DY','NLS_DATE_LANGUAGE=AMERICAN') FROM DUAL;
天
-
D:星期中的第几天——从星期日开始算
SELECT TO_CHAR(SYSDATE,'D') FROM DUAL;
-
DD:月份中的第几天
-
DDD:一年中的第几天
小时
- HH/HH12
显示12小时制的时间
可以通过在HH后面添加AM或PM显示是上午还是下午
SELECT TO_CHAR(SYSDATE,'HH')FROM DUAL;
SELECT TO_CHAR(SYSDATE,'HH AM')FROM DUAL;
- HH24
显示24小时制的时间
SELECT TO_CHAR(SYSDATE,'HH')FROM DUAL;
分钟
- MI
SELECT TO_CHAR(TO_DATE('202212','YYYYMM'),'YYYYMMDD HH24:MI:SS')FROM DUAL;
秒
- SS
日期加一的含义是日期往后加一天
SELECT TO_CHAR(SYSDATE+1,'YYYYMMDD HH24:MI:SS')FROM DUAL;