查询一个日期的几个工作日之前的日期:
写了一个函数,如下:
CREATE FUNCTION [dbo].[GetAgoWorkDay]
(
-- Add the parameters for the function here
@thisTime date,--某个时间点
@agoWorkDays int--多少个工作日之前
)
RETURNS date
AS
BEGIN
-- Declare the return variable here
DECLARE @agodays int--前x天
DECLARE @workdays int--几个工作日
DECLARE @agoday date--前几天的日期
DECLARE @isworkday int--是否为工作日
-- Add the T-SQL statements to compute the return value here
SET @workdays=1
SET @agodays=1
IF(isnull(@thisTime,'')<>'')
BEGIN
WHILE @workdays<@agoWorkDays
BEGIN
--获取是不是工作日
SET @agoday=DATEADD(day,(0-@agodays),@thisTime)--获取某几天前的日期
SELECT @isworkday=DATEPART(dw,@agoday)--获取某几天前的日期是一星期中的第几天,如果是1或7则不是工作日
IF (@isworkday<>1 and @isworkday<>7)--如果不等于1也不等于7,说明是工作日
BEGIN
SELECT @workdays=(@workdays+1)--标志几个工作日的数字加1
END
SELECT @agodays=(@agodays+1)--循环次数加1,也就是再计算向前一天
END
END
-- Return the result of the function
RETURN @agoday
END