文章目录
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
标签:sysdate,03,00,last,函数,--,2024,date,21
From: https://blog.csdn.net/weixin_45176509/article/details/136908269