2016-08-31 8 views
-1

現在の日付と時刻の12時間を追加するT-SQL関数を作成するタスクがありますが、休日/週末は含まれません。現在の日付に時間を追加しますが、祝日と週末は除外します

ALTER FUNCTION [dbo].[GetNextWorkingDay_Custom] (@givenDate DATETIME) 
RETURNS DATE 
AS 
BEGIN 
    DECLARE @StartDate DATETIME 
    DECLARE @EndDate DATETIME 
    DECLARE @DiffDate INT 

    DECLARE @workingDate DATETIME 
    IF (DATENAME(dw , @givenDate) = 'Friday') 
    BEGIN 
     SET @workingDate = DATEADD(day, 3, @givenDate) 
    END 
    ELSE IF (DATENAME(dw , @givenDate) = 'Saturday') 
    BEGIN 
     SET @workingDate = DATEADD(day, 2, @givenDate) 
    END 
    ELSE 
    BEGIN 
     SET @workingDate = DATEADD(day, 1, @givenDate) 
    END 

    SELECT @StartDate = START_DATE 
      ,@EndDate = END_DATE 
      FROM special_time WHERE START_DATE = @workingDate AND IS_HOLIDAY = 1 

    -- Select count(*) from tblHolidays where holdate = @workingDate 
    while ((select count(*) from special_time WHERE START_DATE = @workingDate AND IS_HOLIDAY = 1) > 0) 
    begin 

     set @DiffDate = DATEDIFF(day,@StartDate,@EndDate) 
     set @workingDate = dateadd(dd,@DiffDate,@WorkingDate) 
    end 
    -- if adding a day makes it a Saturday, add 2 more to get to Monday (and test to make sure the week doesn't start with a holiday) 
    IF (DATENAME(dw , @workingDate) = 'Saturday') 
    BEGIN 
     SET @workingDate = DATEADD(day, 2, @workingDate) 
    END 

    RETURN @workingDate 
END 
+2

あなたはサンプル入力と出力を共有することはできますか? –

+2

これまでに試したことを共有してください。これはコード作成サービスではありません。 – Tanner

+1

だから、どうしたの?これは始めるのに最適な場所です:[パブリックフォーラムでのT-SQL質問の投稿方法](http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on -a-public-forum /) – Marusyk

答えて

0

静的な日付ルックアップテーブルを作成します(Google経由でこれを行う方法の多くのガイド、などhttps://www.mssqltips.com/sqlservertip/4054/creating-a-date-dimension-or-calendar-table-in-sql-server/などを見つけることができます)と、その日付が営業日や休日であるかどうかを示し列を追加。

あなたの関数は、その後のように単純にされています

select min(DateValue) as NextWorkingDay 
from DatesLookupTable 
where DateValue > @GivenDate 
    and WorkingDay = 1 
関連する問題