Oracle函数7—日期函数(sysdate 、to_date、add_months、last_day......)

发布于:2024-03-21 ⋅ 阅读:(113) ⋅ 点赞:(0)

1、日期获取(sysdate 、current_date)

1.1 sysdate

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

网站公告

今日签到

点亮在社区的每一天
去签到