oracle数据库时间处理函数、加减、抽取、与字符串互转

2021年4月20日11:40:17数据库教程评论811 views字数 4980阅读模式

一、简介
这里介绍oracle中时间的处理,包含常用时间函数、时间加减、时间抽取、时间与字符串互转。

二、时间函数
2.1 sysdate
sysdate表示当前时间,精确到秒。如:

-- sysdate:表示当前系统时间,精确到秒,如:2021-04-05 12:36:18
select sysdate from dual;
1
2
2.2 systimestamp
systimestamp表示当前系统时间,精确到微秒,包含时区信息。如:

-- systimestamp:表示当前系统时间,精确到微秒,包含时区信息,如:2021-04-05 12:37:37.485164 +08:00
select systimestamp from dual;
1
2
2.3 dbtimezone
dbtimezone返回数据库时区,如:

-- dbtimezone 返回数据库时区, 如:+00:00
select dbtimezone from dual;
1
2
2.4 sessiontimezone
sessiontimezone返回当前会话时区,如:

-- 返回当前会话时区,如:UTC
select sessiontimezone from dual;
1
2
2.5 current_date
current_date返回当前会话时区的当前日期,如:

-- 返回当前会话时区的当前日期,如:2021-04-05 04:45:47
select current_date from dual;
1
2
三、时间加减
3.1 numtodsinterval
numtodsinterval用于时间(天、时、分、秒)加减。

-- numtodsinterval用于时间(天、时、分、秒)加减,
-- 增加1天
select sysdate, sysdate+numtodsinterval(1, 'day') from dual;
-- 减少一天
select sysdate, sysdate+numtodsinterval(-1, 'day') from dual;
-- 增加1小时
select sysdate, sysdate+numtodsinterval(1, 'hour') from dual;
-- 增加1分钟
select sysdate, sysdate+numtodsinterval(1, 'minute') from dual;
-- 增加20秒
select sysdate, sysdate+numtodsinterval(20, 'second') from dual;
1
2
3
4
5
6
7
8
9
10
11
3.2 天数加减
直接通过加减可以对天数加减

-- 通过简单加减天
-- 增加1天
select sysdate, sysdate+1 from dual;
-- 减少10天
select sysdate, sysdate-10 from dual;
1
2
3
4
5
3.3 月数加减
add_months用于月份加减,如:

-- 增加1月
select add_months(sysdate, 1) from dual;
-- 减少1月
select add_months(sysdate, -1) from dual;
1
2
3
4
3.4 天数差
天数差直接减即可,借助floor获取整数,如:

-- 天数差
select sysdate-to_date('2021-04-01', 'yyyy-mm-dd') from dual;
select floor(sysdate-to_date('2021-04-01', 'yyyy-mm-dd')) from dual;
1
2
3
3.5 月份差
months_between用于计算月份差,如:

-- 月份差
select months_between(sysdate, to_date('2021-01-01', 'yyyy-mm-dd')) from dual;
select floor(months_between(sysdate, to_date('2021-01-01', 'yyyy-mm-dd'))) from dual;
1
2
3
四、时间抽取
4.1 时间截取trunc
trunc用于截取时间或数值,如:

-- 保留到年,其他清除为起点值, 如:2021-01-01 00:00:00
select trunc(sysdate, 'yyyy') from dual;
-- 保留到月,其他清除为起点值, 如:2021-04-01 00:00:00
select trunc(sysdate, 'mm') from dual;
-- 保留到月,其他清除为起点值, 如:2021-04-02 00:00:00
select trunc(sysdate, 'dd') from dual;
-- 保留到月,其他清除为起点值, 如:2021-04-02 17:00:00
select trunc(sysdate, 'hh24') from dual;
-- 默认保留到日,其他清除为起点值, 如:2021-04-02 00:00:00
select trunc(sysdate) from dual;

-- 保留两位数,如:1234.12
select trunc(1234.1264,2) from dual;
-- 整数后两位清理0,如:1200
select trunc(1234.1264,-2) from dual;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
4.2 时间四舍五入round
round对指定时间级别四舍五入, 如:

-- 对指定时间级别四舍五入
-- 对年四舍五入,2018-01-01 00:00:00
select round(to_date('2017-07', 'yyyy-mm'), 'yyyy') from dual;
-- 对年四舍五入,2017-01-01 00:00:00
select round(to_date('2017-06', 'yyyy-mm'), 'yyyy') from dual;
-- 对月四舍五入,2017-06-01 00:00:00
select round(to_date('2017-06-15', 'yyyy-mm-dd'), 'mm') from dual;
-- 对月四舍五入,2017-07-01 00:00:00
select round(to_date('2017-06-16', 'yyyy-mm-dd'), 'mm') from dual;
-- 对月四舍五入,2017-06-16 00:00:00
select round(to_date('2017-06-16 01', 'yyyy-mm-dd hh24'), 'dd') from dual;
-- 对月四舍五入,2017-06-17 00:00:00
select round(to_date('2017-06-16 13', 'yyyy-mm-dd hh24'), 'dd') from dual;
1
2
3
4
5
6
7
8
9
10
11
12
13
4.3 时间抽取extract
extract从指定日期中提取指定日期部分,如:

-- 抽取年,如:2021
select extract(year from sysdate) from dual;
-- 抽取月,如:4
select extract(month from sysdate) from dual;
-- 抽取日,日:5
select extract(day from sysdate) from dual;
1
2
3
4
5
6
4.4 月最后一天last_day
last_day获取最后一天,如:

-- last_day日期改为当月的最后一天
select last_day(sysdate) from dual;
1
2
4.5 下个星期next_day
-- 下个星期一
select next_day(sysdate, 'monday') from dual;
-- 下个星期五
select next_day(sysdate, 'friday') from dual;
1
2
3
4
五、时间字符串互转
5.1 时间格式
5.1.1 年表示法
yy:2位年;
yyy:3位年;
yyyy:4位年;
1
2
3
如:

select to_char(systimestamp, 'yy') from dual;
select to_char(systimestamp, 'yyy') from dual;
select to_char(systimestamp, 'yyyy') from dual;
1
2
3
5.1.2 月表示法
mm:2位数字月;
mon:3位英文字符月;
month:完整英文字符月;
1
2
3
如:

select to_char(systimestamp, 'mm') from dual;
select to_char(systimestamp, 'mon') from dual;
select to_char(systimestamp, 'month') from dual;
1
2
3
5.1.3 日表示法:
dd:2位日,当月第几天;
ddd:3位日,当年第几天;
dy:简写英文星期几;
day:完整英文星期几;
1
2
3
4
如:

select to_char(systimestamp, 'dd') from dual;
select to_char(systimestamp, 'ddd') from dual;
select to_char(systimestamp, 'dy') from dual;
select to_char(systimestamp, 'day') from dual;
1
2
3
4
5.1.4 时表示法:
hh:2位12进制小时;
hh24:2位24进制小时;
1
2
如:

select to_char(systimestamp, 'hh') from dual;
select to_char(systimestamp, 'hh24') from dual;
1
2
5.1.5 分表示法:
mi:2位分;
1
如:

select to_char(systimestamp, 'mi') from dual;
1
5.1.6 秒表示法:
ss:2位秒;
1
如:

select to_char(systimestamp, 'ss') from dual;
1
5.1.7 季度表示法:
Q:1位数字季度,从1开始;
1
如:

select to_char(systimestamp, 'Q') from dual;
1
5.1.8 周表示法:
W:当月第几周;
WW:当年第几周;
1
2
如:

select to_char(systimestamp, 'W') from dual;
select to_char(systimestamp, 'WW') from dual;
1
2
5.2 时间转字符串
to_char用于时间转字符串,如:

-- 日期转字符串 to_char
select to_char(sysdate, 'yyyyMMdd') from dual;
select to_char(sysdate, 'yyyyMMddHHmmss') from dual;
select to_char(sysdate, 'yyyy-MM-dd HH:mm:ss') from dual;
select to_char(systimestamp, 'yyyy-mm-dd hh24:mi:ss ff3') from dual;
select to_char(systimestamp, 'yyyy-mm-dd hh24:mi:ss ff6') from dual;
select to_char(systimestamp, 'yyyy-mm-dd hh24:mi:ss ff9') from dual;
select to_char(systimestamp, 'day') from dual;

select to_char(systimestamp, 'mon') from dual;
1
2
3
4
5
6
7
8
9
10
5.3 字符串转时间
to_date和to_timestamp用于字符串转时间,如:

select to_date('20210402', 'yyyymmdd') from dual;
select to_date('20210402', 'yyyymmdd') from dual;
select to_timestamp('2021-04-02 15:23:59', 'yyyy-mm-dd hh24:mi:ss') from dual;
select to_timestamp('20210402', 'yyyymmdd') from dual;
————————————————
版权声明:本文为CSDN博主「panda-star」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chinabestchina/article/details/115441487

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/sjk/21360.html
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定