2011-12-13 9 views
0

deliverydatereceivedate + 4またはreceivedate + 6とし、休日や週末には入らないようにしたいと考えています。見積もり日付

SELECT * , case when column1 = column2 
then dateadd(d,4,receivedate) 
Else dateadd(d,6,Receiveddate) end As DeliveryDate 
from TableA 

私はdeliverydate日付を得ることができるが、それは休日や週末に落ちます。上記のコードから休日や週末を排除するにはどうすればよいですか?

+0

詳細を入力することをおすすめします。どのような種類のDBサーバーを使用していますか? MySQLにはカレンダー関数がありますが、これは私たちが使用するdbsの1つです。また、カレンダー機能を持たないInformix SEも使用しています。 – octopusgrabbus

答えて

0

休日、週末、および例外をすべて格納するテーブルを作成する必要があります。そのルールは将来変更される可能性があり、特定の日付を含めないことは、私の意見ではロジックを変更するよりも良いので、週末の日付を表に含めることにします。

単純に除外された日付ではなくなるまで、DeliveryDateを1日増分するループでSQLをラップしてください(実際にはパフォーマンスが大幅に低下することはありません)。ここで

は、SQL Serverでのロジックの例です

declare @test Table(
    baddate char(10) 
) 

insert into @test (baddate) values ('2011/12/17') 
insert into @test (baddate) values ('2011/12/18') 

declare @DeliveryDate char(10) 

SELECT 
    @DeliveryDate=CONVERT(VARCHAR, 
    case 
     when column1 = column2 then dateadd(d,4,Receiveddate) 
     Else dateadd(d,6,Receiveddate) 
    end,111) 
from (SELECT 'test' [column1], 'test' [column2],GETDATE() Receiveddate) a 

While exists(SELECT * from @test WHERE [email protected]eryDate) 
BEGIN 
    SET @DeliveryDate=CONVERT(VARCHAR,DATEADD(d,1,CONVERT(DATETIME,@DeliveryDate)),111) 
END 

SELECT @DeliveryDate 
0

あなたはMOD 7トリックを使用して電子/ wを把握することができるかもしれないが、それは簡単な休日に対処することではないでしょう。私は別の非db層にこれを理解させることをお勧めします。

関連する問題