本文查找了很多相关书籍,查找了近30种Oracle日期常用操作,从基础的年、月、日的表示,到稍微复杂一点的年初至今的天数,再到更难点的计算工作日的方法都有涉及,应该还是比较全面的 。
一、Oracle日期操作中的常用操作
1.to_char(sysdate,q) 季
2.to_char(sysdate,yyyy)年
3.to_char(sysdate,mm)月
4.to_char(sysdate,dd)日
5.to_char(sysdate,d)星期中的第几天
6.to_char(sysdate,DAY)星期几
7.to_char(sysdate,ddd)一年中的第几天
8.extract(year from query_cxrq)年度
9.extract(month from query_cxrq)月份
10.extract(day from query_cxrq)日
例:select extract(month from sysdate) from dual
二、Oracle日期操作中的简单操作
1.上月末的日期:select last_day(add_months(sysdate, -1)) from dual;
2.本月的最后一秒:select trunc(add_months(sysdate,1),MM) - 1/24/60/60 from dual
3.本周星期一的日期:select trunc(sysdate,day)+1 from dual
4.年初至今的天数:select ceil(sysdate - trunc(sysdate, year)) from dual;
5.今天是今年的第几周:select to_char(sysdate,fmww) from dual
6.今天是本月的第几周:SELECT TO_CHAR(SYSDATE,WW) - TO_CHAR(TRUNC(SYSDATE,MM),WW) + 1 AS "weekOfMon" FROM dual
7.本月的天数:SELECT to_char(last_day(SYSDATE),dd) days FROM dual
8.今年的天数:select add_months(trunc(sysdate,year), 12) - trunc(sysdate,year) from dual
9.下个星期一的日期:SELECT Next_day(SYSDATE,monday) FROM dual
10.sdate+(5/24/60/60) 在系统时间基础上延迟5秒
11.sdate+5/24/60 在系统时间基础上延迟5分钟
12.sdate+5/24 在系统时间基础上延迟5小时
13.sdate+5 在系统时间基础上延迟5天
14.d_months(sysdate,-5) 在系统时间基础上延迟5月
15.d_months(sysdate,-5*12) 在系统时间基础上延迟5年
16.间隔天数:
两个日期间的天数(日期相减得天数)
select floor(sysdate - to_date(20020405,yyyymmdd)) from dual;
Oracle日期操作中的2个计算方法
1.计算工作日方法
create table t(s date,e date);
alter session set nls_date_format = yyyy-mm-dd;
insert into t values(2003-03-01,2003-03-03);
insert into t values(2003-03-02,2003-03-03);
insert into t values(2003-03-07,2003-03-08);
insert into t values(2003-03-07,2003-03-09);
insert into t values(2003-03-05,2003-03-07);
insert into t values(2003-02-01,2003-03-31);
这里假定日期都是不带时间的,否则在所有日期前加trunc即可 。
2.判断当前时间是上午下午还是晚上
SELECT CASE
WHEN to_number(to_char(SYSDATE,hh24)) BETWEEN 6 AND 11 THEN 上午
WHEN to_number(to_char(SYSDATE,hh24)) BETWEEN 11 AND 17 THEN 下午
WHEN to_number(to_char(SYSDATE,hh24)) BETWEEN 17 AND 21 THEN 晚上
END
FROM dual;