2016-12-06 20 views
0

私は必要な結果を得られません。日付を明記し、翌営業日を追加します

私がしたいことは、自分の日付を宣言してから翌営業日を追加したいと思っています。すなわち、 @CASHDATE+1(これは動作しますが)翌営業日が5日必要です。

DECLARE @CASHDATE DATETIME 
SET @CASHDATE='2016-12-02' 

SELECT <<COLUMN_NAME>> FROM <<TABLE_NAME>> 
WHERE RECEIVED_DATE = @CASHDATE /*'2016-12-02'*/ 
AND TRANS_POST_DATE = @CASHDATE+1 /*'2016-12-05'*/) <== I don't want it to be '2016-12-03 or 04', I'm trying to get the next business day. 

これを達成するためのアイデアは歓迎します。私はDATEPART(dw, @CASHDATE) NOT IN (1, 7)で実験してきましたが、私が望む結果を得ることができません。

+0

あなたのソリューションを投稿していただきありがとうございます。私は今、キャッシュフローレポートを完成させることができます。 – Mandy

答えて

0

コマンドDATEADD使用:機能させる

AND TRANS_POST_DATE = DATEADD (dd, 1, @CASHDATE)[email protected]+1 

DATEADD (Transact-SQL)

を。それは簡単... ​​GIME分です...それ

-- ============================================= 
-- Author:  <Author,,Name> 
-- Create date: <Create Date, ,> 
-- Description: <Description, ,> 
-- ============================================= 
/* 

declare @date datetime 
set @date = '2016-12-10' 

declare @newDate datetime 
select @newDate = dbo.[GetBussinesDay](@date) 

select @date, @newDate 

*/ 
create FUNCTION [dbo].[GetBussinesDay] 
(
    @Date as datetime 
) 
RETURNS datetime 
AS 
BEGIN 
    declare @NewDate datetime 

    declare @BussinessDays table (bDay int) 
    insert into @BussinessDays VALUES (2) --mon 
    insert into @BussinessDays VALUES (3) --Tue 
    insert into @BussinessDays VALUES (4) --Wed 
    insert into @BussinessDays VALUES (5) --Thu 
    insert into @BussinessDays VALUES (6) --Fri 

    if exists(select bDay from @BussinessDays where bDay = DATEPART(dw,@Date)) 
    begin 
     set @NewDate = @Date; 
    end 
    else 
    begin 
     set @NewDate = dbo.GetBussinesDay(dateadd(dd,1,@Date)); 
    end 

    return @NewDate 

END 

関数を作成して、コードを変更するために:

AND TRANS_POST_DATE = dbo.GetBussinesDay(@CASHDATE)[email protected]+1 

また、あなたは、関数でタマン日に変更することができます...先物の変更やルールのために。ここで

0
DATEADD(day, 
    CASE 
     WHEN DATENAME(dw,CASHDATE) = 'Friday' THEN 3 
     WHEN DATENAME(dw,CASHDATE) = 'Saturday' THEN 2 
     ELSE 1 
    END, 
    CASHDATE) 

は、それはあなたがDATEPART(dw,Date)を使用してDATEFRIST設定があるものであるときを考える必要がある考慮事項の

DECLARE @Dates AS TABLE (CASHDATE DATETIME) 
INSERT INTO @Dates VALUES ('2016-11-28'),('2016-11-29'),('2016-11-30'),('2016-12-01'),('2016-12-02'),('2016-12-03'),('2016-12-04') 

;WITH cteNextBizDays AS (
    SELECT 
     CASHDATE 
     ,NextBusinessDay = DATEADD(day, 
      CASE 
      WHEN DATENAME(dw,CASHDATE) = 'Friday' THEN 3 
      WHEN DATENAME(dw,CASHDATE) = 'Saturday' THEN 2 
      ELSE 1 
      END 
      ,CASHDATE) 
    FROM 
     @Dates 
) 

SELECT 
    CASHDATE 
    ,DATENAME(dw,CASHDATE) CashDateDayOfWeek 
    ,NextBusinessDay 
    ,DATENAME(dw,NextBusinessDay) NextBusinessDayDayofWeek 
FROM 
    cteNextBizDays 

一つを計算する方法をお見せする例です。 DATENAMEと比較することで、それを心配する必要はありません。

0

あなたはDATEDIFFDATEADD機能を利用することができます:

DECLARE @CASHDATE datetime='2016-12-03' 
SELECT 
    CashDate = @CASHDATE, 
    NextBusinessDay = 
     DATEADD(DAY, 
       CASE 
        WHEN DATEDIFF(DAY, 0, @CASHDATE) % 7 > 3 
         THEN 7 - DATEDIFF(DAY, 0, @CASHDATE) % 7 
        ELSE 1 
       END, 
       @CASHDATE 
     ) 

DATEDIFF(DAY, 0, @CASHDATE) % 7@CASHDATEが何であるかの日を決定します。これに基づいて、次の月曜日までに必要な日数を追加します。

関連する問題