ORACLE 日期处理

日期差值

返回的是数值格式

年月差

月差: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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值