首页 > 数据库 >Oracle常用时间操作

Oracle常用时间操作

时间:2023-08-01 19:36:15浏览次数:31  
标签:sysdate char 常用 -- yyyy dual Oracle 操作 select

  1. dd-mon-yy格式转换为yyyy-mm-dd
select to_char(to_date('01-5月-05','dd-mon-yy'),'yyyy-mm-dd') from dual
  1. 计算2009-05-01与2008-04-30的月份差
select (extract(year from to_date('2009-05-01 ','yyyy-mm-dd')) - extract(year from to_date('2008-04-30','yyyy-mm-dd'))) * 12 + 
        extract(month from to_date('2008-05-01','yyyy-mm-dd')) - extract(month from to_date('2008-04-30','yyyy-mm-dd')) months from dual; 
--extract:用于从日期时间值中取得所需要的特定数据 year.month.day.hour.minute.second

select ceil((to_date('2009-05-01','yyyy-mm-dd') - to_date('2008-04-30','yyyy-mm-dd'))/30) from dual;
select ceil(months_between(to_date('2009-05-01','yyyy-mm-dd'),to_date('2008-04-30','yyyy-mm-dd'))) from dual; 

--查看现在距2008-08-08已过去了多少个月
select ceil(months_between(sysdate,to_date('2008-08-08','yyyy-mm-dd'))) from dual;
  1. 年月日时分秒计算
select to_date('2010-04-27 13:23:44','yyyy-mm-dd hh24:mi:ss') from dual; --字符串转换成日期      
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') as nowTime from dual;  --日期转化为字符串   

select to_char(sysdate,'yyyy') as nowYear   from dual;    --获取时间的年    'yyyy.yyy.yy.y'分别显示不同年的计数位

--获取时间的月 
select to_char(sysdate,'mm')    from dual;     -- 04
select to_char(sysdate,'mon')   from dual;     --中文版:4月  英文版: apr
select to_char(sysdate,'month') from dual;     --中文版:4月  英文版: april

--获取时间的日   
select to_char(sysdate,'dd')    from dual;      --当月的第几天
select to_char(sysdate,'ddd')   from dual;      --当年的第几天
select to_char(sysdate,'d')     from dual;      --当周的第几天  select to_char(sysdate,'D') from dual;
select to_char(sysdate,'ddspth')from dual;      --英文显示当月的第几天

--获取时间的时   
select to_char(sysdate,'hh24')  from dual;      --24小时制
select to_char(sysdate,'hh')    from dual;      --12小时制

--获取时间的分   
select to_char(sysdate,'mi')    from dual;  
--获取时间的秒     
select to_char(sysdate,'ss')    from dual;
  1. 查看星期几
select to_char(sysdate,'dy')    from dual;      --星期几        中文版:星期二  英文版:Tue
select to_char(sysdate,'day')   from dual;      --星期几        中文版:星期二  英文版:Tuesday

--英文显示星期几: to_date('2010-04-27','yyyy-mm-dd') 部分可换成sysdate或其他时间    
select to_char(to_date('2010-04-27','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;  --小写
select to_char(to_date('2010-04-27','yyyy-mm-dd'),'DAY','NLS_DATE_LANGUAGE = American') from dual;  --大写  
select to_char(to_date('2010-04-27','yyyy-mm-dd'),'Day','NLS_DATE_LANGUAGE = American') from dual;  --首字母大写 

--设置会话日期语言格式 : alter session set nls_date_language='american';
  1. next_day函数:计算机当前日期的下一个星期几
next_day(sysdate,6)是从当前开始下一个星期五(n-1)。后面的数字是从星期日开始算起。    
1 2 3 4 5 6 7    
日 一 二 三 四 五 六 

--本月的第一个星期一
select next_day(to_date(to_char(sysdate,'yyyy-mm')||'-01','yyyy-mm-dd'),'星期一') from dual;
select next_day(to_date(to_char(sysdate,'yyyy-mm')||'-01','yyyy-mm-dd'),2) from dual

--计算上一个月的第一个星期一
select next_day(add_months(to_date(to_char(sysdate,'yyyy-mm')||'-01','yyyy-mm-dd'),-1),'星期一') from dual;
select next_day(add_months(to_date(to_char(sysdate,'yyyy-mm')||'-01','yyyy-mm-dd'),-1),2) from dual;

--计算下一个月的第一个星期一
select next_day(add_months(to_date(to_char(sysdate,'yyyy-mm')||'-01','yyyy-mm-dd'),1),'星期一') from dual;
select next_day(add_months(to_date(to_char(sysdate,'yyyy-mm')||'-01','yyyy-mm-dd'),1),2) from dual;
  1. 判断一年是不是闰年
--如果是28-平年, 29-闰年
select to_char( last_day( to_date('02' ||&year,'mmyyyy') ), 'dd' ) from dual;
select to_char( last_day( to_date('02' ||extract(year from sysdate),'mmyyyy') ), 'dd' ) from dual;
select to_char(last_day(add_months(trunc(sysdate,'year'),2)-1),'dd') from dual;
select decode(to_char(last_day(to_date(to_char(sysdate,'yyyy')||'-02-01','yyyy-mm-dd')),'dd'),'28','平年','闰年') from dual
  1. 计算今年的天数
select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual
  1. 计算本月的第一天
select to_char(last_day(add_months(sysdate,-1))+1,'yyyy-mm-dd') from dual;
select to_date(to_char(sysdate,'yyyy-mm')||'-01','yyyy-mm-dd')  from dual;
  1. 计算本月最后一天
--select last_day(sysdate)from dual;
select last_day(trunc(sysdate)) from dual;
select trunc(last_day(add_months(sysdate,0))) from dual;
select add_months(to_date(to_char(sysdate,'yyyy-mm')||'-01','yyyy-mm-dd'),1)-1 from dual;
select last_day(to_date(to_char(sysdate,'yyyy-mm')||'-01','yyyy-mm-dd'))  from dual;
select add_months(to_date(to_char(last_day(add_months(sysdate,-1))+1,'yyyy-mm-dd'),'yyyy-mm-dd'),1)-1 from dual;
  1. 上个月最后一天
select trunc(last_day(add_months(sysdate,-1))) from dual;
select to_date(to_char(sysdate,'yyyy-mm')||'-01','yyyy-mm-dd')-1  from dual;
--select trunc(last_day(add_months(sysdate,-1)))+1-1/24/60/60 from dual
  1. last_day(trunc(sysdate))扩展
--本月第一天
select add_months(last_day(trunc(sysdate)),-1)+1 from dual;
--上个月第一天
select add_months(last_day(trunc(sysdate)),-2)+1 from dual;
--下个月第一天
select add_months(last_day(trunc(sysdate)),0)+1 from dual;
--本月最后一天
select last_day(trunc(sysdate))from dual;
--上个月最后一天
select add_months(last_day(trunc(sysdate)),-1) from dual;
--下个月最后一天
select add_months(last_day(trunc(sysdate)),1) from dual;
--计算本月的天数
select last_day(trunc(sysdate)) - (add_months(last_day(trunc(sysdate)),-1)+1)+1 from dual;
--select trunc(last_day(sysdate))- to_date(to_char(sysdate,'yyyy-mm')||'-01','yyyy-mm-dd')+1 from dual
--计算上个月的天数
select add_months(last_day(trunc(sysdate)),-1) - (add_months(last_day(trunc(sysdate)),-2)+1)+1 from dual;
--计算下个月的天数
select add_months(last_day(trunc(sysdate)),1) - (add_months(last_day(trunc(sysdate)),0)+1)+1 from dual;
  1. trunc(sysdate,'month') 扩展
--本月的第一天
select trunc(sysdate,'month') from dual;
--本月最后一天
select last_day(trunc(sysdate, 'month')) from dual;
--上个月的第一天
select trunc(trunc(sysdate, 'month') - 1, 'month') from dual;
--上个月的最后一天
select trunc(sysdate, 'month') - 1 from dual;
--下个月的第一天
select last_day(trunc(sysdate, 'month'))+1 from dual;
--下个月的最后一天
select last_day(last_day(trunc(sysdate, 'month'))+1)from dual;
  1. 计算本年的第一天
select trunc(sysdate,'year') from dual;
select trunc(sysdate,'yyyy') from dual;
select to_date(to_char(sysdate,'yyyy')||'-01-01','yyyy-mm-dd') from dual;
  1. 计算本年的最后一天
select add_months(trunc(sysdate,'year'),12)-1 from dual;
select to_date(to_char(sysdate,'yyyy')||'-12-31','yyyy-mm-dd') from dual;
select add_months(to_date(to_char(sysdate,'yyyy')||'-01-01','yyyy-mm-dd'),12)-1 from dual;
select add_months(last_day(to_date(to_char(sysdate,'yyyy')||'-01-01','yyyy-mm-dd')),11) from dual;
  1. 计算两个日期间的星期几的总数
--计算2010-04-28至2010-10-01之间的工作日的总数
select count(*)      
  from (select rownum-1 rnum      
          from all_objects      
         where rownum <= to_date('2010-10-01','yyyy-mm-dd') - to_date('2010-04-28','yyyy-mm-dd')+1      
        )      
 where to_char( to_date('2010-04-28','yyyy-mm-dd')+rnum, 'day')not in ( '星期六', '星期日' );  

--替换说明: all_objects --> dual;  where rownum --> connect by rownum/level; day --> d/D, dy
--"星期六"、"星期日" --> 1,7 或单个数字 'sat'.'sun'; not in --> in; count(*) --> * ; 日期可替换成替他形式.
  1. 查看当前系统时间的四种方法
select sysdate from dual;
select current_date from dual;
select add_months(sysdate, 0)  from dual;
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
  1. 计算本周星期几的日期
--1-7:oracle默认一周从星期日开始
select trunc(sysdate,'day')+1 from dual; 
select trunc(sysdate,'day')+2 from dual; 
select trunc(sysdate,'day')+3 from dual; 
select trunc(sysdate,'day')+4 from dual; 
select trunc(sysdate,'day')+5 from dual;
select trunc(sysdate,'day')+6 from dual;
select trunc(sysdate,'day')+7 from dual;

--0-6:iso默认一周从星期一开始
select trunc(sysdate,'iw')+0 from dual; 
select trunc(sysdate,'iw')+1 from dual; 
select trunc(sysdate,'iw')+2 from dual; 
select trunc(sysdate,'iw')+3 from dual; 
select trunc(sysdate,'iw')+4 from dual; 
select trunc(sysdate,'iw')+5 from dual;
select trunc(sysdate,'iw')+6 from dual;
  1. 如何求一年的总天数,把下一年的1.1减当年的1.1
select add_months(trunc(sysdate,'yyyy'),12)-trunc(sysdate,'yyyy') from dual 

select case when (mod(to_number(to_char(sysdate,'YYYY')),4)  =0 or mod(to_number(to_char(sysdate,'YYYY')),100 ) =0) 
              and mod(to_number(to_char(sysdate,'YYYY')),400 ) <>0  
            then 366 else 365 
        end total_days 
from dual
  1. 计算奥运会距离现在的时间
select '奥运会距今已过:' || trunc(dt) || '天' || 
      trunc((dt - trunc(dt)) * 24) || '小时' ||
      trunc((dt * 24 - trunc(dt * 24)) * 60) || '分' ||
      trunc((dt * 1440 - trunc(dt * 1440)) *60) || '秒'
 from(
      select sysdate - to_date('2008-08-08 20:00:00', 'yyyy-mm-dd hh24:mi:ss') dt 
        from dual
       );
      
select extract(day from dt) "天",
       extract(hour from dt) "小时",
       extract(minute from dt) "分",
       trunc(extract(second from dt)) "秒"
  from (
        select systimestamp - to_date('2008-08-08 20:00:00', 'yyyy-mm-dd hh24:mi:ss') dt
          from dual
       );
  1. 时间格式范围
hh24:24小时格式下时间范围为: 0:00:00 - 23:59:59    
hh12:12小时格式下时间范围为: 1:00:00 - 12:59:59
  1. 时间为null的情况
select to_date(null) from dual;
select to_char(null) from dual;
  1. 时间格式的设置
--系统设置
alter system  set NLS_DATE_LANGUAGE = American   
--会话设置   
alter session set NLS_DATE_LANGUAGE = American
  1. 计算一个季度的总天数
select last_day(to_date(to_char(sysdate,'yyyy-')||lpad(floor(to_number(to_char(sysdate,'mm'))/3)*3+3,2,'0')||'-01','yyyy-mm-dd'))
       -to_date(to_char(sysdate,'yyyy-')||lpad(floor(to_number(to_char(sysdate,'mm'))/3)*3+1,2,'0')||'-01','yyyy-mm-dd')
       +1
  from dual;
  1. 判断当前时间是上午还是?
select case when to_number(to_char(sysdate,'hh24')) between 6 and 11  then '上午'
            when to_number(to_char(sysdate,'hh24')) between 12 and 18 then '下午'
            else '晚上'
       end
  from dual;

select case when to_number(to_char(sysdate,'hh24')) between 1 and 5  then '凌晨'
            when to_number(to_char(sysdate,'hh24')) between 6 and 11  then '上午'
            when to_number(to_char(sysdate,'hh24')) between 12 and 18 then '下午'
            when to_number(to_char(sysdate,'hh24')) between 19 and 24 then '晚上'
       end
  from dual;
  1. 查找月份差:months_between(date,date)
select months_between(to_date('01-31-2010','mm-dd-yyyy'),to_date('12-31-2009','mm-dd-yyyy')) "months" from dual;
  1. 查看某一天距今天的天数
select trunc(sysdate)-to_date('20050101','yyyymmdd') from dual;
  1. 一年以后的今天
--   一年以后的今天: select add_months(sysdate,12)  from dual;          
--   一年以前的今天: select add_months(sysdate,-12) from dual;
--   系统当前时间:   select add_months(sysdate, 0)  from dual;
  1. 从今天零点之后经过的秒数
select to_char(sysdate,'SSSSS') from dual;
  1. 本周星期几(n)的日期
select trunc(sysdate,'day') + n from dual;
  1. 本月的天数
select to_char(last_day(sysdate),'dd') days from dual;
  1. 计算当前月所有星期五的日期
select to_char(dt,'yyyy-mm-dd') 
  from(select trunc(sysdate,'mm')+rownum-1 dt
         from dual connect by rownum<=31
       )t
 where to_char(t.dt,'mm') = to_char(sysdate,'mm')
   and to_char(t.dt,'day')= '星期五';

--计算当前月所有星期五的日期(以","隔开)
select wm_concat(to_char(dt,'yyyy-mm-dd')) 
  from(select trunc(sysdate,'mm')+rownum-1 dt from dual connect by rownum<=31)t
 where to_char(t.dt,'mm') = to_char(sysdate,'mm')
   and to_char(t.dt,'day')= '星期五';
      
--计算当前月之前3个月的所有星期五的日期   
select to_char(dt,'yyyy-mm-dd') 
  from(select trunc(sysdate,'mm')+rownum-1 dt from dual connect by rownum<= (select add_months(sysdate,3)-trunc(sysdate)))t
 where to_char(t.dt,'day')= '星期五';

标签:sysdate,char,常用,--,yyyy,dual,Oracle,操作,select
From: https://blog.51cto.com/u_15361954/6926794

相关文章

  • PHPImagick图像处理常用操作大全
    PHPImagick图像处理常用操作大全PHPImagick是流行的PHP图像处理扩展,它提供了丰富的图像处理方法,可以用于处理图片尺寸、质量、颜色、效果等等。在本文中,我们将探讨一些常用的PHPImagick图像处理操作,包括缩放、裁剪、调整颜色、添加水印、添加滤镜等等。PHPImagick图像处理常用操......
  • 【ArangoDb踩坑】arango视图更新操作注意
    一、问题ping协议的覆盖率字段一直更新有误。二、原因ArangoDBviews中的属性commitIntervalMsec默认为1000毫秒,该属性限制了提交视图数据存储更新后必须要等待指定毫秒数才能查询文档,否则数据就是不可见的。snmp、ping、rping、telemetry四种协议是轮流更新的,其中snmp、ping......
  • 操作系统的cpu分时共享技术
    为什么我们日常的电脑既可以看视频,又可以浏览网页,又可以微信聊天等等同时运行?为什么我们日常的计算机4c或8c的可以处理数以百计或数以千计的计算任务呢?1什么是cpu分时共享技术操作系统的cpu分时共享技术---如果同时有很多进程在执行,操作系统会将cpu的执行时间分成很多份,进程按......
  • 几种常用到的 Hybrid App 技术框架
    移动操作系统在经历了诸神混战之后,BlackBerryOS、SymbianOS、WindowsPhone等早期的移动操作系统逐渐因失去竞争力而退出。目前,市场上主要只剩下安卓和iOS两大阵营,使得iOS和安卓工程师成为抢手资源。然而,由于两者系统的差异,开发同一个应用需投入两倍的工作量,不仅增加了人力......
  • RectTransform操作
    RectTransform操作一、改变RectTransform的大小三种方法//1.直接对sizeDelta属性进行赋值,其中X和Y可以对应理解成width和height。sizeDelta的具体含义:若achors是一个点的话则代表宽高,否则为到锚点的距离rectTransform.sizeDelta=newVector2(200,200);//2.使用SetSizeWith......
  • 常用sql
    本月的所有日期。找一个id有1~31的表SELECTDATE_FORMAT(date_add(last_day(curdate()),INTERVAL(cast(help_topic_idASsignedINTEGER)-DAY(last_day(curdate())))+1DAY),'%Y-%m-%d')DAYFROMmysql.help_topicWHEREhelp_topic_id<DAY(last_day(cu......
  • Oracle之is null命中索引
    ISNULL用于判断某一列中的值是否为空,当ISNULL作为WHERE条件的时候,查询不会命中该列上的索引(具体执行时还要看优化器的策略)。--1.伪列+联合索引,通过加伪列,创建伪联合索引,来使ISNULL命中索引(数据量达到几万时,此索引将不会命中)CREATEINDEXidx_zzxhONbhis.mz_fp(zzxh,-1)......
  • QT常用总结(1)
    一、QLineEdit常用设置QLineEdit*Edit1=newQLineEdit;1.设置QLineEdit为不可编辑的状态Edit1->setenabled(false);//方式一Edit1->SetReadOnly(true);//方式二2.设置QLineEdit输入时提示输入范围Edit1->setToolTip("输入范围为");3.正则表达式限定QLineEdit的输入范围Q......
  • 文件操作
    1.文件基本操作1.1文件的概述文件是数据的抽象和集合,是数据存储的一种形式。一篇文章、一段视频、一个可执行程序,都可以被保存为一个文件,并赋予一个文件名。文件是操作系统提供给用户操作硬盘的一种虚拟的概念。用来承接指令和数据。文件拥有文本文件和二进制文件两种......
  • 医疗知识图谱问答 ——Neo4j 基本操作
    前言说到问答机器人,就不得不说一下ChatGPT啦。一个预训练的大预言模型,只要是人类范畴内的知识,似乎他回答得都井井有条,从写文章到写代码,再到解决零散琐碎的问题,不光震撼到我们普通人,就百度和阿里也因此紧追其后分别推出了文心一言和通义千问。所以好像我们也可以通过GPT,并训练特......