2011-12-13 33 views
0

我想要得到一個deliverydatereceivedate + 4receivedate + 6天,哪些不應該在假期和週末。查找估計日期

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

我可以得到deliverydate日期,但它是在假期和週末。我如何從上面的代碼中刪除節假日和週末?

+0

建議您添加更多詳細信息。你使用什麼樣的數據庫服務器? MySQL中有日曆功能,我們使用的是dbs中的一種。我也使用Informix SE,它沒有日曆功能。 – octopusgrabbus 2011-12-13 23:56:40

回答

0

您需要創建一個存儲所有假期,週末和例外的表格。我會在表中列入週末日期,因爲這個規則可能會在未來發生變化,不包括某些日期比我認爲的更改邏輯更好。

只需將您的SQL封裝在一個循環中(它確實不會影響性能),它將DeliveryDate遞增1天,直到它不再是排除日期。

這裏的邏輯在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]) 
BEGIN 
    SET @DeliveryDate=CONVERT(VARCHAR,DATEADD(d,1,CONVERT(DATETIME,@DeliveryDate)),111) 
END 

SELECT @DeliveryDate 
0

一個例子。雖然您可能能夠使用MOD 7個特技弄清楚W/E,它不會是容易對付的假期。我建議你讓另一個非db層來解決這個問題。