当前位置:Gxlcms > 数据库问题 > Oracle中时间和日期函数总结

Oracle中时间和日期函数总结

时间:2021-07-01 10:21:17 帮助过:5人阅读

* from nls_session_parameters where parameter=NLS_DATE_FORMAT; 修改日期的格式: alter session set nls_date_format = yyyy-mm-dd; 永久设置日期格式:改注册表oracle/HOME0 加字符串NLS_DATE_FORMAT 值yyyy-mm-dd; 1.dd-mon-yy转换为yyyy-mm-dd select to_char(to_date(01-5月-05,dd-mon-yy),yyyy-mm-dd) from dual 2.计算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; 3.年月日时分秒计算 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; 4.查看星期几 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‘; 5. 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; 6.判断一年是不是闰年 --如果是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 7.计算今年的天数:select add_months(trunc(sysdate,year), 12) - trunc(sysdate,year) from dual 8.计算本月的第一天: 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; 9.计算本月最后一天 --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; 10.上个月最后一天: 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 11.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; 12.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; 13.计算本年的第一天 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; 14.计算本年的最后一天 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; 15.计算两个日期间的星期几的总数 --计算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(*) --> * ; 日期可替换成替他形式. 16.查看当前系统时间的四种方法: 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; 17.计算本周星期几的日期 --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; 18.如何求一年的总天数 把下一年的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 19.计算奥运会距离现在的时间: 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 2.时间为null的情况 select to_date(null) from dual; select to_char(null) from dual; 3.时间格式的设置 --系统设置 alter system set NLS_DATE_LANGUAGE = American --会话设置 alter session set NLS_DATE_LANGUAGE = American 3.计算一个季度的总天数 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; 4.判断当前时间是上午还是? 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; 5.查找月份差: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; 6.查看某一天距今天的天数:select trunc(sysdate)-to_date(20050101,yyyymmdd) from dual; 7. 一年以后的今天:

人气教程排行