2 回答
TA贡献1772条经验 获得超8个赞
--工作日期参数表(说明 iswork :0-不是工作日 1-是工作日 。设置说明:1)如果正常工作日(1-5)中有非工作日,需要在此维护设iswork设为0,2)如果周六周日为工作日,则需要在此维护iswork=1。
create table dict_workdate
(
workdate varchar2(10),
iswork number(2),
primary key workdate
);
--判断是否为交易日函数
CREATE OR REPLACE FUNCTION isworkdate(in_date date) Return number
is
result varchar2(256);
l_week number(1);
l_workdate varchar2(10);
l_iswork number(1);
begin
select to_char(in_date,'D') into l_week from dual;
l_workdate := to_char(in_date,'yyyy-mm-dd') ;
if l_week in (1,7) then
select nvl(max(iswork),0) into l_iswork
from dict_workdate where workdate=l_workdate ;
else
select nvl(max(iswork),1) into l_iswork
from dict_workdate where workdate=l_workdate ;
end if;
return l_iswork;
EXCEPTION
WHEN OTHERS THEN
return null;
END;
TA贡献1864条经验 获得超2个赞
单纯通过周几判断是否交易日比较简单,看datepart(weekday,@Date)的返回值,大于1小于7就是周一到周五,如果考虑节假日的话,应该需要建一张节假日的表,判断的时候先剔除表中的日期。
判断下一个交易日(不考虑节假日情况):
declare @Get_Date_JYR datetime
set @Get_Date_JYR ='2011.12.03'
while datepart(weekday,@Get_Date_JYR) in (1,7)
begin
select @Get_Date_JYR=@Get_Date_JYR+1
end
select @Get_Date_JYR
添加回答
举报