查找预计日期

时间:2011-12-13 23:43:59

标签: sql

我希望获得deliverydate receivedate + 4天或receivedate + 6天,这不应该是假日和周末。

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

我可以获得deliverydate日期,但它可以在假日和周末进行。如何从上面的代码中消除假期和周末?

2 个答案:

答案 0 :(得分: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 baddate=@DeliveryDate)
BEGIN
    SET @DeliveryDate=CONVERT(VARCHAR,DATEADD(d,1,CONVERT(DATETIME,@DeliveryDate)),111)
END

SELECT @DeliveryDate

答案 1 :(得分:0)

虽然你可能能够使用mod 7技巧找出w / e,但处理假期并不容易。我建议你让另一个非db层来解决这个问题。