首页 > 数据库 >Oracle日期处理整理

Oracle日期处理整理

时间:2023-05-08 15:13:06浏览次数:47  
标签:sysdate yyyy -- char 整理 日期 dual Oracle select

1.获取日期元素
注意:
1).hh24写法指24小时,Oracle默认是12小时
2).分钟用mi,不要用mm,因为与之前的MM冲突
    1-12小时写法 yyyyMMdd24miss(Oracle默认)
    1-24小时写法 yyyyMMddHH24miss
获取日期元素:
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; --日期转化为字符串
select to_char(sysdate,'yyyy') from dual; --获取时间的年
select to_char(sysdate,'mm') from dual; --获取时间的月
select to_char(sysdate,'dd') from dual; --获取时间的日
select to_char(sysdate,'hh24') from dual; --获取时间的时
select to_char(sysdate,'mi') from dual; --获取时间的分
select to_char(sysdate,'ss') from dual; --获取时间的秒

--获取当年/当月哪一周
--获取指定时间为哪一周
select to_char(to_date('20200805','yyyy-mm-dd hh24:mi:ss'),'w') FROM dual;

ww:按每年的1月1日为第一周第一天,1月8日为第二周第一天
w:与ww功能类似,不过它是按每月的1日为每周第一天,例如1日为当月第一周第一天,8日为第二周第一天
iw:自然周,为星期一至星期日算一周,且每年的第一个星期一为第一周

--查询今年第几周
select to_char(sysdate,'ww') from dual; --每天第一天为第一周第一天
select to_char(sysdate,'iw') from dual; --自然周
-- 查询本月第几周
select to_char(sysdate,'w') from dual;

select trunc(sysdate,'d')+1 from dual; --周日为一周起始日期
select trunc(sysdate,'iw') from dual;  --周日为一周结束日期

时间精确到毫秒用timestamp
-- 时间精确到毫秒
select to_char(systimestamp, 'yyyy-mm-dd hh24:mi:ss.ff ') from dual;
select to_timestamp('2003-10-2410:48:45.656000','yyyy-mm-dd hh24:mi:ssxff') from dual;
select to_char(systimestamp,'yyyy-mm-ddhh24:mi:ssxff') time1, to_char(current_timestamp) time2 from dual;
select to_char(systimestamp, 'yyyymmddhh24missff'),to_char(systimestamp, 'yyyymmddhh24miss'),to_char(systimestamp, 'yyyy-mm-dd hh24:mi:ss.ff ') from dual;
select substr(to_char(systimestamp, 'yyyymmddhh24missff'),0,17) from dual;
select cast(systimestamp as date) from dual;

2.日期转换
select to_char(SYSDATE,'yyyyMMddHH24miss') from dual;
select to_date('20200803140816','yyyyMMddHH24miss') from dual;
select to_date('2020-08-03 00:00:00','yyyy-mm-dd hh24:mi:ss') FROM dual;

3.trunc:截断到最接近的日期,单位为天
select trunc(sysdate, 'mm') from dual -- 返回当月第一天.
select trunc(sysdate,'yy') from dual -- 返回当年第一天
select trunc(sysdate,'dd') from dual --返回当前年月日
select trunc(sysdate,'yyyy') from dual --返回当年第一天
select trunc(sysdate,'d') from dual --返回当前星期的第一天:星期天
select trunc(sysdate, 'hh') from dual --返回当前小时时间
select trunc(sysdate, 'mi') from dual --TRUNC()函数没有秒的精确

select trunc(to_date(last_day(sysdate))) + (8*60+30)/ (24*60) from dual;--获取当前月最后一天2020/8/31 8:30:00
select trunc(sysdate+1) + (8 * 60+30) / (24 * 60) from dual;--获取下一天的8点半日期2020/8/4 8:30:00

4.日期加减
加:
select sysdate,add_months(sysdate,12) from dual; --加1年
select sysdate,add_months(sysdate,1) from dual; --加1月
select sysdate,to_char(sysdate+7,'yyyy-mm-dd HH24:MI:SS') from dual; --加1星期
select sysdate,to_char(sysdate+1,'yyyy-mm-dd HH24:MI:SS') from dual; --加1天
select sysdate,to_char(sysdate+1/24,'yyyy-mm-dd HH24:MI:SS') from dual; --加1小时
select sysdate,to_char(sysdate+1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual; --加1分钟
select sysdate,to_char(sysdate+1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual; --加1秒

减:
select sysdate,add_months(sysdate,-12) from dual; --减1年
select sysdate,add_months(sysdate,-1) from dual; --减1月
select sysdate,to_char(sysdate-7,'yyyy-mm-dd HH24:MI:SS') from dual; --减1星期
select sysdate,to_char(sysdate-1,'yyyy-mm-dd HH24:MI:SS') from dual; --减1天
select sysdate,to_char(sysdate-1/24,'yyyy-mm-dd HH24:MI:SS') from dual; --减1小时
select sysdate,to_char(sysdate-1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual; --减1分钟
select sysdate,to_char(sysdate-1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual; --减1秒

5.round:返回指定的小数位元数进行四舍五入运算的结果
select round(123.456, 0) from dual; -- 123
select round(123.456, 1) from dual; -- 123.5
select round(123.456, 2) from dual; -- 123.46
select round(123.456, 3) from dual; -- 123.456
select round(-123.456, 2) from dual; -- -123.46

6.计算时间差
注:oracle时间差是以天数为单位,所以换算成年月,日
select floor(to_number(sysdate-to_date('2020-08-03 18:25:03','yyyy-mm-dd hh24:mi:ss'))/365) as spanYears from dual --时间差-年
select ceil(months_between(sysdate,to_date('2020-08-03 18:25:03','yyyy-mm-dd hh24:mi:ss'))) as spanMonths from dual --时间差-月
select floor(to_number(sysdate-to_date('2020-08-03 18:25:03','yyyy-mm-dd hh24:mi:ss'))) as spanDays from dual --时间差-天
select floor(to_number(sysdate-to_date('2020-08-03 18:25:03','yyyy-mm-dd hh24:mi:ss'))*24) as spanHours from dual --时间差-时
select floor(to_number(sysdate-to_date('2020-08-03 18:25:03','yyyy-mm-dd hh24:mi:ss')) * 24 * 60) as spanMinutes from dual --时间差-分
select floor(to_number(sysdate-to_date('2020-08-03 18:25:03','yyyy-mm-dd hh24:mi:ss')) * 24 * 60 * 60) as spanSeconds from dual --时间差-秒

7.定时器用到的时间
1) 每分钟执行
Interval => TRUNC(sysdate,'mi') + 1 / (24*60)

2) 每天定时执行
例如:每天的凌晨2点执行
Interval => TRUNC(sysdate) + 1 +2 / (24)

3) 每周定时执行
例如:每周一凌晨2点执行
Interval => TRUNC(next_day(sysdate,2))+2/24 --星期一,一周的第二天

4) 每月定时执行
例如:每月1日凌晨2点执行
Interval =>TRUNC(LAST_DAY(SYSDATE))+1+2/24

5) 每季度定时执行
例如每季度的第一天凌晨2点执行
Interval => TRUNC(ADD_MONTHS(SYSDATE,3),'Q') + 2/24

6) 每半年定时执行
例如:每年7月1日和1月1日凌晨2点
Interval => ADD_MONTHS(trunc(sysdate,'yyyy'),6)+2/24

7) 每年定时执行
例如:每年1月1日凌晨2点执行
Interval =>ADD_MONTHS(trunc(sysdate,'yyyy'),12)+2/24

 

标签:sysdate,yyyy,--,char,整理,日期,dual,Oracle,select
From: https://www.cnblogs.com/lgx5/p/17381822.html

相关文章

  • 数据库运维实操优质文章分享(含Oracle、MySQL等) | 2023年4月刊
    本文为大家整理了墨天轮数据社区2023年4月发布的优质技术文章,主题涵盖Oracle、MySQL、PostgreSQL等数据库的基础安装配置、故障处理、性能优化等日常实践操作,以及概念梳理、常用脚本、注意事项等总结记录,分享给大家:Oracle优质技术文章概念梳理&基础配置Oracle之嵌套循环连接(Ne......
  • MySQL----日期时间函数运用
    1.1获得当前日期+时间(date+time)函数:now()除了 now()函数能获得当前的日期时间外,MySQL中还有下面的函数:current_timestamp()   current_timestamplocaltime()   localtimelocaltimestamp()   localtimestamp    这些日期时间函数,都等同于now()。鉴于......
  • Oracle 报错:ORA-01438: 值大于为此列指定的允许精度
    今天在插入oracle数据库时,提示“ORA-01438:值大于为此列允许的精度“错误,经网上查找资料后解决了此错误错误说明ORA-01438,发生此错误的原因在于我们插入的数据长度超过了字段指定的字段长度,比如插入的数据为102329204123.33829492,小数点前长度为12,小数点后长度为8,若字段字符类型......
  • [20230508]crack oracle执行文件.txt
    [20230508]crackoracle执行文件.txt--//昨天看了链接:https://www.xifenfei.com/2023/04/ora-07445-kglsget.html--//提到open阶段执行如下:-----CurrentSQLStatementforthissession(sql_id=gtf6tgc2ycgxx)-----selectcount(*)fromXDB.XDB$SCHEMAswheres.xmldata.s......
  • Leetcode11~20题整理
    11.盛最多水的容器比较暴力的做法:classSolution{public:intmaxArea(vector<int>&h){vector<int>t;intn=h.size();intres=-1;for(inti=0;i<n;i++){for(intj=0;j<(int)t.size(......
  • Oracle DB服务器体系结构
    一、OracleDB服务器体系结构概览。  OracleDB服务器体系结构包含以下三种主要结构:内存结构、进程结构和存储结构。基本的OracleDB系统由OracleDB和数据库实例组成。数据库包括物理结构和逻辑结构。由于物理结构和逻辑结构是分开的,因此管理数据的物理存储时不会影响......
  • 使用 JavaScript连接Oracle 数据库(js连接oracle)
    原文链接 在建立Web交互应用程序时,一般使用JavaScript语言作为表现层,而Oracle作为背后真正的数据库。连接JavaScript和Oracle数据库需要一组技术,可以实现将JavaScript执行的数据请求发送到服务器上的Oracle数据库,这样就可以访问和操作Oracle数据库中的相关内容。 在建立Web......
  • 数据库迁移之从oracle 到 MySQL
    关键字:数据库迁移之从oracle到MySQL开场白:对于水平扩展需求很强烈的大型网站,oracle到mysql的迁徙是必然的,一个重要的因素就是Oracle数据库是收费的,而MySQL则是完全免费的,mysql经过在大型网站的考验及沉淀目前已经修复的很完美了,下面就oracle到mysql......
  • oracle第一课
    一、sql初步了解1**SQL****语句分为以下三种类型DML:DataManipulationLanguage数据操纵语言DDL:DataDefinitionLanguage数据定义语言DCL:DataControlLanguage数据控制语言1.1DML用于查询与修改数据记录包括如下SQL语句:INSERT:添加数据到数据库中UPDATE:修......
  • 日期与时间【Date/SimpleDateFormat/Calendar】
    视频链接:https://www.bilibili.com/video/BV1Cv411372m?p=121&vd_source=9140dcc493e34a9f4e95ca2f8f71bbd31Data1.1Date类概述Date类的对象在java中代表的是当前所在系统的此刻日期时间。Date的构造器publicDate():创建一个Date对象,代表的是系统当前此刻日期时间。Date......