建立 标量值函數,這個函數會傳回一個日期值, 然後就可以在存儲過程中調用了, 不過調用的方式有所不同, 如果不加 dbo,那sql會不認識這個函數, 即 SELECT [dbo].[f_workdateadd]('2011-8-29',1,3)
定義節假日表
CREATE TABLE Holiday(
HDate date primary key clustered, --節假日期
Name nvarchar(50) not null) --假日名稱,或備注
GO
USE [PCMIS]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
alter function [dbo].[f_workdateadd](
@sndate date, --産品投入日
@i int, --為1,開始的日期
@j int --間隔的天數
)returns date
as
begin
declare @str date
declare @str2 date --與@str互相比較,取最大值
while (@i<[email protected])
begin
if (dateadd(DAY,@i,@sndate) in (select Hdate from Holiday)) --如果遇到節假日
begin
set @[email protected]+1 --如果遇到節假日,時間要延長
end
if (dateadd(DAY,@i,@sndate) not in (select Hdate from Holiday)) --沒有遇到節假日
begin
select @str=dateadd(DAY,@i,@sndate)
if (@i=1)
begin
set @[email protected]
end
else
if (@i>1)
begin
if (@str>@str2)
set @[email protected]
end
end
set @[email protected]+1
end
return (@str2)
end