一、简介 这里介绍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