Oracle 常用函数-日期函数

       oracle的开发和使用中,经常需要用到各种各样的日期函数,网上日期函数搜索起来一大把,用起来很多有一些小问题,自己动手总结记录下,也能让有缘的同学少走一点弯路。

--常用日期型函数

1Sysdate 当前日期和时间

Select sysdate from dual;

2Add_months(d,n) 当前日期d后推n个月

用于从一个日期值增加或减少一些月份

当前日期后两个月:

Select add_months(sysdate,2) from dual;

当前日期前三个月:

Select add_months(sysdate,-3) from dual;

 

3dbtimezone()返回时区

select dbtimezone from dual;

 

4,round[舍入到最接近的日期](day:舍入到最接近的星期日)

   select sysdate S1,

   round(sysdate) S2 ,

   round(sysdate,‘year‘) YEAR,

   round(sysdate,‘month‘) MONTH ,

   round(sysdate,‘day‘) DAY fromdual

 

5next_day( date, weekday )指定日期的下一个日期

语法 : next_day( date,weekday )

select Next_day(to_date(20130107,‘yyyymmdd‘), 2)  from dual ;  

该函数功能很强大,但是需要注意,周日是1,周一是2,以此类推

 

6,trunc[截断到最接近的日期,单位为天] ,返回的是日期类型

 select sysdate S1,

       trunc(sysdate) S2, --返回当前日期,无时分秒

       trunc(sysdate, ‘year‘) YEAR,--返回当前年的11,无时分秒

       trunc(sysdate, ‘month‘)MONTH, --返回当前月的1,无时分秒

       trunc(sysdate, ‘day‘) DAY --返回当前星期的星期天,无时分秒

  from dual

7last_day 一个月中的最后一天

select last_day(Trunc(SYSDATE, ‘MONTH‘)) from dual

返回最后一天;

如果直接使用 selectlast_day(SYSDATE) from dual,不仅仅会返回日期,还会返回当前的时分秒等内容;

 

8to_date,to_char日期和字符转换函数用法

select to_char(sysdate,‘yyyy-mm-dd hh24:mi:ss‘) as nowTime from dual;   --日期转化为字符串  

select to_char(sysdate,‘yyyy‘) as nowYear  from dual;   --获取时间的年  

select to_char(sysdate,‘q‘)    asnowSecond from dual;  --获取时间的季度

select to_char(sysdate,‘mm‘)    asnowMonth from dual;   --获取时间的月  

select to_char(sysdate,‘dd‘)    asnowDay    from dual;   -获取时间的日  

select to_char(sysdate,‘hh24‘) as nowHour  from dual;   --获取时间的时  

select to_char(sysdate,‘mi‘)    asnowMinute from dual;   --获取时间的分  

select to_char(sysdate,‘ss‘)    asnowSecond from dual;   --获取时间的秒

将字符串转换为日期类型  

select to_date(‘2013-05-07 13:23:44‘,‘yyyy-mm-dd hh24:mi:ss‘)  from dual ;

 

9months_between两个日期之间的月份差

select months_between(to_date(201302,‘yyyymm‘),to_date(201212,‘yyyymm‘))as ans from dual;    

 

10localtimestamp()返回会话中的日期和时间

 select localtimestamp from dual;

常用日期数据格式(该段为摘抄)

YYYYYY 年的最后一位,两位或三位 Select to_char(sysdate,YYY) from dual 002表示2002

SYEARYEAR SYEAR使公元前的年份前加一负号 Select to_char(sysdate,SYEAR) from dual -1112表示公元前111 2

Q 季度,13月为第一季度 Select to_char(sysdate,Q) from dual 2表示第二季度①

MM 月份数 Select to_char(sysdate,MM) from dual 12表示12

RM 月份的罗马表示 Selectto_char(sysdate,RM) from dual IV表示4

Month 9个字符长度表示的月份名 Select to_char(sysdate,Month) from dual May后跟6个空格表示5

WW 当年第几周 Select to_char(sysdate,WW) from dual 24表示2002613日为第24

W 本月第几周 Select to_char(sysdate,W) from dual 2002101日为第1

DDD 当年第几, 11日为00121日为032 Select to_char(sysdate,DDD) from dual 363 20021 22 9日为第363

DD 当月第几天 Select to_char(sysdate,DD) from dual 04 104日为第4

D 周内第几天 Select to_char(sysdate,D) from dual 5 2002314日为星期一

DY 周内第几天缩写 Selectto_char(sysdate,DY) from dual SUN 2002324日为星期天

HHHH12 12进制小时数 Selectto_char(sysdate,HH) from dual 02 午夜2点过8分为02

HH24 24小时制 Select to_char(sysdate,HH24) from dual 14 下午208分为14

MI 分钟数(059) Select to_char(sysdate,MI) from dual 17下午417

SS 秒数(059) Select to_char(sysdate,SS) from dual 22 11322

提示注意不要将MM格式用于分钟(分钟应该使用MI)MM是用于月份的格式,将它用于分钟也能工作,但结果是错误的。

 

--日期函数的一些具体用法

 

1、获得上月的最后一天:

select to_char(add_months(last_day(sysdate),-1),‘yyyy-MM-dd‘) LastDay fromdual;

 

2、上个月的今天(同日期)

select to_char(add_months(sysdate,-1),‘yyyy-MM-dd‘) PreToday from dual;

 

3、上个月的第一天

select to_char(add_months(last_day(sysdate)+1,-2),‘yyyy-MM-dd‘) First_Day_Last_Month from dual;

SELECT Trunc(Trunc(SYSDATE, ‘MONTH‘) - 1, ‘MONTH‘)First_Day_Last_Month   FROM dual;

 

4、获得日期对应的星期几     

select to_char(to_date(‘2013-04-07‘,‘yyyy-mm-dd‘),‘day‘) from dual;  

  

5、从当前日期到某一个日期的天数      

    select floor(sysdate -to_date(‘20130405‘,‘yyyymmdd‘)) from dual;   

 

6、找出今年的天数      

   selectadd_months(trunc(sysdate,‘year‘), 12) - trunc(sysdate,‘year‘) from dual   

看今年是366天,还是365天。

 

7、简单的找出闰年   

如果2月份的天数是28天,那么就不是闰年   

 select decode(to_char(last_day(to_date(‘200902‘,‘yyyymm‘) ),‘dd‘),‘28‘,‘不是闰年‘,‘闰年‘ )from dual   

 

8、当前日期是本年的第几天     

  selectto_char(sysdate,‘ddd‘),sysdate from dual;       

   

9、查找上月的第一天和最后一刻,本月的第一天和最后一刻

     SELECT Trunc(Trunc(SYSDATE,‘MONTH‘) - 1, ‘MONTH‘) First_Day_Last_Month,

       Trunc(SYSDATE, ‘MONTH‘) - 1 /86400 Last_Day_Last_Month,

       Trunc(SYSDATE, ‘MONTH‘)First_Day_Cur_Month,

       LAST_DAY(Trunc(SYSDATE,‘MONTH‘)) + 1 - 1 / 86400 Last_Day_Cur_Month

   FROM dual;

 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。