我希望获得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
日期,但它可以在假日和周末进行。如何从上面的代码中消除假期和周末?
答案 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层来解决这个问题。