1、互转
select
sysdate,
to_char(sysdate, 'yyyymmdd hh24:mi:ss'), --时间转字符串,参数2为转换后的格式
to_date('20190103','yyyymmdd') , --字符串转时间,参数2为字符串的格式
(to_date('19700101 08:00:00','yyyymmdd hh24:mi:ss') +1647081254000/(1000*60*60*24)),--时间戳转时间
(sysdate - to_date('1970-01-01 08:00:00', 'yyyy-mm-dd hh24:mi:ss'))*24*60*60*1000 --时间转时间戳(如果系统时间是/分隔,记得格式转换)
from dual;
2、日期获取
select
------------------获取当前时间-------------------------------------
sysdate,--年月日时分秒
current_date,--年月日时分秒
systimestamp,--年月日时分秒
current_timestamp,--年月日时分秒,可以带精度,精度为o—9之间的一个整数,默认为6
localtimestamp,--年月日时分秒,可以带精度,精度为o—9之间的一个整数,默认为6
dbtimezone--返回数据库时区
to_char(systimestamp, 'yyyymmdd hh24:mi:ss.ff3')--获取三位数秒数时间
-------------------获取单独的年月日时分秒周数---------------------
to_char(sysdate,'yyyy'), --获取年份
to_char(sysdate,'mm'),--获取月份
to_char(sysdate,'dd'),--获取天数
to_char(sysdate,'hh24'),--获取小时数
to_char(sysdate,'mi'),--获取分钟数
to_char(sysdate,'ss'),--获取秒数
to_char(sysdate,'day'),--获取星期几
to_char(sysdate,'ddd'),--获取今年多少天
to_char(sysdate,'d'),--获取一周第几天
to_char(sysdate,'w'),--获取是本月第几周(从1号开始每7天周数加1,初始周数01)
to_char(date'2022-01-03','ww'),--获取本年第几周(从1.1每7天周数加1,初始周数01)
to_char(date'2022-01-03','iw'),--获取本年一周第几天(从今年第一个周日开始,每每7天周数加1,初始周数01)
------------------------获取短日期---------------------------------------
trunc(sysdate),--今天的年月日日期
trunc(sysdate,'dd'),--今天的年月日日期
trunc(sysdate,'hh'),--今天的年月日时日期
trunc(sysdate,'mi'),--今天的年月日时分日期
------------------------其他日期获取------------------------------------
trunc(sysdate,'d'),--本周第一天的年月日日期,周日是一周的开始
trunc(sysdate,'mm'),--本月第一天的年月日日期
trunc(sysdate, 'q'),--本季度第一天的年月日日期
trunc(sysdate,'yyyy')--本年第一天的年月日日期
trunc(sysdate,'d')+6,--本周最后一天的年月日日期,周日是一周的开始
last_day(sysdate),--本月最后一天的年月日日期
next_day(sysdate, 1)--下一个星期几(1-7 代表周日到周六,也可以是‘星期几’)
--以下若使用 sysdate,to_date(),date''等date类型只能获取到年月日,时分秒获取不到--
--systimestamp,timestamp''等timestamp类型才可以获取到时分秒--
--date'2022-03-03',timestamp'2022-03-03'必须是当前oracle系统日期格式的字符串--
extract(year from systimestamp), --获取年份
extract(month from systimestamp),--获取月份
extract(day from systimestamp), --获取天数
extract(hour from systimestamp), --获取小时数
extract(minute from systimestamp), --获取分钟数
extract(second from systimestamp) --获取带小数位的秒数
from dual;
3、日期移动及差值
select
---------移动方式一,更好----------------------
sysdate+interval '1' year,--移动一年
sysdate+interval '1' month, --移动一个月
sysdate+interval '1' day,--移动一天
sysdate+interval '1' hour,--移动一小时
sysdate+interval '1' minute,--移动一分钟
sysdate+interval '1' second--移动一秒钟
------移动方式二-------------------------
sysdate+1*365,--移动一年,当前年份为平年
sysdate+1*31, --移动一个月,当前月份为大月,小月为28、29、30
sysdate+1,--移动一天
sysdate+1/24,--移动一小时
sysdate+1/24/60,--移动一分钟
sysdate+1/24/60/60,--移动一秒钟
------其他移动-----------------------------
add_months(sysdate,1),--移动一个月,负数前移,小数则小数位丢弃
--------日期差值,其实可以直接两个日期相减得到天数差,然后在换算---------------------------
date'2022-06-03'-sysdate,--天数差
months_between(date'2022-03-02',date'2022-02-03') -参1为结束日期,只有天份一致或者都是月底返回整数,其他情况返回天数差/31
----------四舍五入---------------------------------
round(sysdate,'year'),--year或者yy,按**1-6月和7-12月**四舍五入到最近的几几年1月1日
round(sysdate,'month'),--month或者mm,按**1-15日和16-30日**四舍五入到最近的几月1日
round(sysdate,'day'),--按**周一到周三和周四到周日**四舍五入到最近的周日
round(sysdate,'dd'),--如果小时超过12,向前进1
round(sysdate,'hh'),--如果分超过30,向前进1
round(sysdate,'mi') --秒数30是分界线,相当于四舍五入的5,如果秒超过30,向前进1
from dual;
Oracle入门第二课:三个SQL讲清楚Oracle日期函数
于 2022-04-01 14:50:33 首次发布