【发布时间】:2013-12-15 15:03:45
【问题描述】:
我见过这种函数在其他编码语言(Python、jQuery 等)中的不同版本,但在 SQL 中却没有。我有一个程序需要计算一个从创建日期起 65 天的日期,但它不能包括周末或节假日。我们已经有了一个功能,它只能将工作日添加到日期,但不考虑假期。我们有一个假期表,其中列出了所有的假期日期,tblHolidayDates 有一个标准日期格式的 HolidayDate 列。
我该怎么做?如果有人可以给我一个 CREATE TABLE 查询,我也会考虑也许只是创建一个日历表——它只需要日期、工作日和假期列。
下面我给出了添加工作日的当前循环函数,但它缺少节假日。任何帮助将不胜感激!
ALTER FUNCTION [dbo].[AddWorkDaysToDate]
(
@fromDate datetime,
@daysToAdd int
)
RETURNS datetime
AS
BEGIN
DECLARE @toDate datetime
DECLARE @daysAdded integer
-- add the days, ignoring weekends (i.e. add working days)
set @daysAdded = 1
set @toDate = @fromDate
while @daysAdded <= @daysToAdd
begin
-- add a day to the to date
set @toDate = DateAdd(day, 1, @toDate)
-- only move on a day if we've hit a week day
if (DatePart(dw, @toDate) != 1) and (DatePart(dw, @toDate) != 7)
begin
set @daysAdded = @daysAdded + 1
end
end
RETURN @toDate
END
【问题讨论】:
-
我删除了 MySQL 标记,因为该问题使用 SQL Server 语法。
-
如果您决定创建日历表,则应删除假期表。这样,您只需维护一组数据。您不需要工作日列,因为您可以使用 datepart() 来获得它。稍后您可能会发现需要添加会计年度/期间/季度字段。
标签: sql sql-server