创建一个函数要求输入日期和天数查询具体工作日日期(暂不考虑节假日),例如输入日期为201204,天数为10天,那么第10天的工作日具体日期是:20120413
源代码:
创建表类型
IF TYPE_ID('tyWorkday') IS NOT NULL
DROP TYPE tyWorkday;
GO
/*工作日日期*/
CREATE TYPE tyWorkday AS TABLE
(Id INT IDENTITY(1,1),
Workday DATETIME);
创建函数
IF OBJECT_ID('fnWorkday') IS NOT NULL
DROP FUNCTION fnWorkday;
GO
CREATE FUNCTION fnWorkday
(@date INT ,
@n INT )
RETURNS DATETIME
AS
BEGIN
DECLARE @m INT ,--增长的天数
@d INT ,--当月的天数
@wdate VARCHAR(10), --工作日期
@tyw AS tyWorkday,
@workday DATETIME --需要返回的工作日期
SET @m=1;
SET @wdate=@date*100+@m;
SET @d=DATEDIFF(DAY,@wdate,DATEADD(MONTH,1,@wdate ));
WHILE @m<=@d
BEGIN
SET @wdate=@date*100+@m;
/*当日期不是周六、周日的时候插入到@tyw表*/
IF DATEPART(dw,@wdate) NOT IN (1,7)
BEGIN
INSERT INTO @tyw VALUES(@wdate);
END;
SET @m=@m+1;
END;
SELECT @workday=Workday FROM @tyw WHERE Id=@n;
RETURN @workday;
END;
调用示例:
SELECT dbo.fnWorkday(201204,10);
--结果
/*
(无列名)
2012-04-13 00:00:00.000
*/