Oracle函数7—日期函数(sysdate 、to

2024-03-22 1915阅读

温馨提示:这篇文章已超过367天没有更新,请注意相关的内容是否还可用!

文章目录

    • 1、日期获取(sysdate 、current_date)
    • 2、设置时间格式(to_date、to_char)
    • 3、两个日期的差(直接加减)
    • 4、月份加减(add_months)
    • 5、取某月最后一天(last_day)
    • 6、两个日期相差月份数(months_between)
    • 7、获取下个周几是几号(next_day)
    • 8、获取指定时间的年或月或日(extract)
    • 9、时间的四舍五入(round、trunc)
    • 10、取一组时间的最大值和最小值(greatest、least)
    • 11、时区换算(new_time)
    • 小结

      1、日期获取(sysdate 、current_date)

      1.1 sysdate

      Oracle函数7—日期函数(sysdate 、to
      (图片来源网络,侵删)

      Oracle通过sysdate函数实现对计算机操作系统的当前日期和时间获取,即使一张表没有sysdate这个字段,也可以进行业务查询。

      例如:获取当前时间:

       select sysdate from dual; 
       --2024-03-21 14:40:52
      

      提示:后面查询的表可以是数据库里面的任意表

      1.2 current_date

      返回的是当前会话的时区的系统日期,一个依赖于时区。

      例如:获取当前时间(东八区):

      select current_date from dual;
      --2024-03-21 14:44:48
      

      2、设置时间格式(to_date、to_char)

      函数to_date 和 to_char作用是相反的, 是将字符串格式转成时间格式,to_char是将时间格式转成字符串格式。

      2.1 to_date

      例如:将2024/3/21 12:01:14转成标准时间格式,

      select to_date('2024/3/21 12:01:14','yyyy-MM-dd HH:MI:SS') from dual
      -- 2024-03-21 12:01:14
      

      提示:to_date的参数不仅可以接受字符串的参数,还可以接受数值类型的参数。

      例如:

      select  to_date(20240321,'yyyy-MM-dd') from dual 
      -- 2024-03-21 00:00:00
      

      2.2 to_char

      例如:将当前时间转成yyyyMMdd HH:MI:SS与yyyy-MM-dd HH:MI:SS格式,

      select to_char(sysdate, 'yyyyMMdd HH:MI:SS') from dual;
      --20240321 03:11:51
      select to_char(sysdate, 'yyyy-MM-dd HH:MI:SS') from dual;
      --2024-03-21 03:12:04
      

      to_char使用的时候可以在format参数中插入字符串,以双引号的方式插入。

      例如:

      select to_char(sysdate , 'yyyy"年"MM"月"dd"日"')  from  dual;
      -- 2024年03月21日
      

      3、两个日期的差(直接加减)

      可以直接对两个日期进行相减,返回的数值单位是天。

      例如:当前时间100天以后是什么时间

      --当天时间
      SELECT sysdate  from dual;
      --2024-03-21 14:49:53
      --100天以后
      SELECT sysdate +100 from dual;
      --2024-06-29 14:49:53
      

      例如:当前距离五一放假还有多少天

      --当前时间
      SELECT sysdate  from dual;
      --2024-03-21 14:49:53
      --距离放假天数
      select to_date('2024-05-01','yyyy-MM-dd') - sysdate from dual  
      --40.38010416666666666666666666666666666667
      

      4、月份加减(add_months)

      向后加用正数,向前加用负数。

      例如:三个月后

      select add_months(sysdate,3)   from  dual
      --2024-06-21 14:57:18
      

      例如:二个月前

      select add_months(sysdate,-2) from  dual 
      --2024-01-21 14:58:11
      

      5、取某月最后一天(last_day)

      计算某个月的最后一天是哪天,可以指定具体月份。

      例如:当前月的最后一天

      select add_months(sysdate,3)   from  dual
      --2024-03-31 15:00:41
      

      例如:2024年2月的最后一天。

      select last_day(to_date('2024-02-01','yyyy-MM-dd')) from dual
      --2024-02-29 00:00:00
      

      6、两个日期相差月份数(months_between)

      计算两个日期之间相差的月份数,返回结果可能带小数。

      例如:2008年距离现在过去多少月了?

      select floor(months_between(sysdate ,to_date('2008-08-01','yyyy-MM-dd'))) from dual
      --187
      

      例如:2008年距离现在过去多少年了?

      select floor(months_between(sysdate ,to_date('2008-08-01','yyyy-MM-dd'))/12) from dual
      --15
      

      7、获取下个周几是几号(next_day)

      表示从指定日期开始算,下周几是几号?此函数的第二个参数范围是[1,7],超出范围会报错。

      注意的是:1代表周日,7代表周六。

      例如:下个周五是几号

      select next_day(SYSDATE ,6) from dual
      -- 2024-03-22 15:25:34
      

      8、获取指定时间的年或月或日(extract)

      例如:获取当前时间年份

      SELECT extract(YEAR FROM sysdate) FROM DUAL;  
      -- 2024
      

      例如:获取当前时间月份

      SELECT extract(MONTH FROM sysdate) FROM DUAL;  
      -- 3
      

      例如:获取当前时间是几号

      SELECT extract(DAYFROM sysdate) FROM DUAL;  
      -- 21
      

      9、时间的四舍五入(round、trunc)

      9.1 round

      如果某时间在中午之前,使用round函数会将该时间设置为该天0点(就是午夜),如果为中午之后就设置为次日零点。就好比以中午12:00:00为分界进行四舍五入。

      例如:2024-03-21 11:11:10会变成2024-03-21 00:00:00,2024-03-21 13:11:10会变成2024-03-22 00:00:00

      SELECT round( to_date('2024-03-21 11:11:10','yyyy-MM-dd hh24:mi:ss')) FROM dual;
      --2024-03-21 00:00:00
      SELECT round( to_date('2024-03-21 13:11:10','yyyy-MM-dd hh24:mi:ss')) FROM dual;
      --2024-03-22 00:00:00
      

      9.2 trunc

      trunc函数无论是否超过12:00:00,都会设置为当日零点,类似于向下取整。

      例如:2024-03-21 11:11:10与2024-03-21 13:11:10,都是变成2024-03-21 00:00:00

      SELECT trunc( to_date('2024-03-21 11:11:10','yyyy-MM-dd hh24:mi:ss')) FROM dual;
      --2024-03-21 00:00:00
      SELECT trunc( to_date('2024-03-21 13:11:10','yyyy-MM-dd hh24:mi:ss')) FROM dual;
      --2024-03-21 00:00:00
      

      10、取一组时间的最大值和最小值(greatest、least)

      例如:greatest取最大值

      select greatest(to_date('2024-11-11','yyyy-MM-dd'),to_date('2024-12-11','yyyy-MM-dd'),to_date('2024-01-05','yyyy-MM-dd'),to_date('2024-10-11','yyyy-MM-dd')) from dual
      --2024-12-11 00:00:00
      

      例如:least取最小值

      select least(to_date('2024-11-11','yyyy-MM-dd'),to_date('2024-12-11','yyyy-MM-dd'),to_date('2024-01-05','yyyy-MM-dd'),to_date('2024-10-11','yyyy-MM-dd')) from dual
      --2024-01-05 00:00:00
      -- 3
      

      11、时区换算(new_time)

      用法:new_time(date,‘this’,‘other’),date代表的是要换算时区的时间,‘this’代表的是要换算时区的编码缩写,‘other’换算目标时区的编码缩写。

      例如:2024-10-01 12:00:00在北京和夏威夷的时间分别是多少

      select  to_date('2024-10-01 12:00:00','yyyy-MM-dd hh24:mi:ss'),new_time(to_date('2024-10-01 12:00:00','yyyy-MM-dd hh24:mi:ss'),'EST','HST') from dual
      -- 2024-10-01 12:00:00     2024-10-01 07:00:00
      

      小结

      Oracle当中的时间函数使用非常灵活,可以变换各种格式进行查询处理。

      例如:小帅2024年03月21日入职新公司,三个月试用期,转正后的每月第一天可以做转正报告。那小帅第一次做转正报告在什么时候?

      select last_day(add_months(to_date('2024-03-21','yyyy-MM-dd'),3))+1 from dual
      --2024-07-01 00:00:00
      
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]