CREATE FUNCTION fn_DateDiffWork( @BDate datetime, @EDate datetime ) RETURNS INT AS BEGIN DECLARE @i int,@BDate_P datetime,@EDate_P datetime SET @i = 0 SET @BDate_P = @BDate; SET @EDate_P = @EDate;
WHILE DATEDIFF(dd,@BDate_P,@EDate_P) > 0 --用来算两个日期间有多少天是周末 BEGIN IF (@@datefirst + DATEPART(dw,@BDate_P)) % 7 <= 1 --重点是这儿,一周中的第几天加上@@datefirst再模7。 BEGIN SET @i = @i + 1 END; SET @BDate_P = @BDate_P + 1 END RETURN(DATEDIFF(dd,@BDate,@EDate)- @i) END此算法的结果中不包含参数中的@EDate,如果要加上这一天的话,则在循环那段要稍加修改。
select datediff(day,convert(varchar,'2006-06-07 17:46:17',120),convert(varchar,getdate(),120)) as days--结果
days
-----------
365(所影响的行数为 1 行)
本人穷,只有10分相赠!
本人穷,只有10分相赠!
本人穷,只有10分相赠!
@BDate datetime,
@EDate datetime
)
RETURNS INT
AS
BEGIN
DECLARE @i int,@BDate_P datetime,@EDate_P datetime
SET @i = 0
SET @BDate_P = @BDate;
SET @EDate_P = @EDate;
WHILE DATEDIFF(dd,@BDate_P,@EDate_P) > 0 --用来算两个日期间有多少天是周末
BEGIN
IF (@@datefirst + DATEPART(dw,@BDate_P)) % 7 <= 1
--重点是这儿,一周中的第几天加上@@datefirst再模7。
BEGIN
SET @i = @i + 1
END;
SET @BDate_P = @BDate_P + 1
END
RETURN(DATEDIFF(dd,@BDate,@EDate)- @i)
END此算法的结果中不包含参数中的@EDate,如果要加上这一天的话,则在循环那段要稍加修改。