oracle日期格式

不同格式日期之间转换

TO_DATE

TO_DATE的日期格式参数中,如果24小时显示,需要使用HH24

1
select to_date('2020-07-12 10:00:00', 'yyyy-mm-dd hh24:mi:ss') from dual;

由于oracle中不区分大小写问题,所以分钟使用mi表示;如果使用mm,则会和月份冲突,引起错误。

参数省略HH、MM、SS时,oracle默认取值为0,即只显示到日。

同样,省略DD参数,oracle默认取值为1,取整到当前月;但是省略MM并不会取整到年。

TO_CHAR
1
select to_char(sysdate,'W') from dual;
参数 描述
Q 当年季度
W 当月第几周
WW 当年第几周
D 一周的第几天(周日为第一天)
DD 当月第几天
DDD 当年第几天
DY 星期几简写
DAY 星期几全称

可以在参数后设置日期语言

1
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day','NLS_DATE_LANGUAGE = American') from dual;

得到当天凌晨0点0分0秒的日期

1
select trunc(sysdate) from dual;

得到这天的最后一秒

1
select trunc(sysdate) + 0.99999 from dual;

得到小时的具体数值

1
select trunc(sysdate) + 1/24 from dual;

得到明天凌晨0点0分0秒的日期

1
select trunc(sysdate+1) from dual;

本月一日的日期

1
select trunc(sysdate,'mm') from dual;

得到下月一日的日期

1
select trunc(add_months(sysdate,1),'mm') from dual;

返回当前月的最后一天

1
2
3
4
select last_day(sysdate) from dual; 
select last_day(trunc(sysdate)) from dual;
select trunc(last_day(sysdate)) from dual;
select trunc(add_months(sysdate,1),'mm') - 1 from dual;

得到一年的每一天

1
2
3
select trunc(sysdate,'yyyy')+ rn -1 date0 
from
(select rownum rn from all_objects where rownum<366);

判断某一日子所在年分是否为润年

1
select decode(to_char(last_day(trunc(sysdate,'y')+31),'dd'),'29','闰年','平年') from dual;