oracle如何写时间sql语句,Oracle SQL 语句对时间操作的总结

在SQL语句中,常常用会对时间(或日期)进行一些处理,下面是比较通用的一些语句:

延迟:

sysdate+(5/24/60/60)          在系统时间基础上延迟5秒

sysdate+5/24/60               在系统时间基础上延迟5分钟

sysdate+5/24                  在系统时间基础上延迟5小时

sysdate+5                     在系统时间基础上延迟5天

add_months(sysdate,-5)        在系统时间基础上延迟5月

add_months(sysdate,-5*12)     在系统时间基础上延迟5年

上月末的日期:

select last_day(add_months(sysdate, -1)) from dual;

本月的最后一秒:

select trunc(add_months(sysdate,1),'MM') - 1/24/60/60 from dual

本周星期一的日期:

select trunc(sysdate,'day')+1 from dual

年初至今的天数:

select ceil(sysdate - trunc(sysdate, 'year')) from dual;

今天是今年的第几周 :

select to_char(sysdate,'fmww') from dual

今天是本月的第几周:

SELECT TO_CHAR(SYSDATE,'WW') - TO_CHAR(TRUNC(SYSDATE,'MM'),'WW') + 1 AS "weekOfMon" from dual

本月的天数

SELECT to_char(last_day(SYSDATE),'dd') days from dual

今年的天数

select add_months(trunc(sysdate,'year'), 12) - trunc(sysdate,'year') from dual

下个星期一的日期

SELECT Next_day(trunc(SYSDATE),'monday') from dual

================================

计算工作日方法

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即可。