2013-12-23 4 views
0

У нас есть система доставки посылок, которая регистрирует посылки, которые должны быть доставлены как ParcelReceivedDate, поле datetime.Как найти целевые данные в следующую среду в 1700 году в SQL Server 2008

Мы должны определить целевую дату и время доставки таким образом, чтобы любая посылка, полученная в субботу или воскресенье, должна была быть назначена в следующую среду 17:00 GMT.

CASE 
    WHEN Priority = 'Normal' and DATENAME(weekday,ParcelReceivedDate) IN ('Saturday') 
    THEN ?? 

    WHEN Priority = 'Normal' and DATENAME(weekday,ParcelReceivedDate) IN ('Sunday') 
    THEN ?? 

    Else DATEADD(hour,24,ParcelReceivedDate) 
END as ParcelTargetDate 
+0

Я отредактировал мой ответ. Проверьте синтаксис, но трассировка главной дороги;) ​​ –

+0

У вас есть или вы можете создать [таблицу календаря] (http://blog.jontav.com/post/9380766884/calendar-tables-are-incredibly-useful- в-SQL)? Это был бы самый простой способ решить эту проблему. – GarethD

ответ

1

Попробуйте это:

CASE 
    WHEN Priority = 'Normal' and DATENAME(weekday,ParcelReceivedDate) IN ('Saturday') 
    THEN 
     dateadd(second, -datepart(second, ParcelReceivedDate), 
      dateadd(minute, -datepart(minute, ParcelReceivedDate), 
       dateadd(hour, 17 - datepart(hour, ParcelReceivedDate), 
        dateadd(day, 4, ParcelReceivedDate) 
       ) 
      ) 
     ) 
    WHEN Priority = 'Normal' and DATENAME(weekday,ParcelReceivedDate) IN ('Sunday') 
    THEN 
     dateadd(second, -datepart(second, ParcelReceivedDate), 
      dateadd(minute, -datepart(minute, ParcelReceivedDate), 
       dateadd(hour, 17 - datepart(hour, ParcelReceivedDate), 
        dateadd(day, 3, ParcelReceivedDate) 
       ) 
      ) 
     ) 
    ELSE DATEADD(hour,24,ParcelReceivedDate 
END as ParcelTargetDate 

Вы знаете, если вы в субботу или воскресенье, так что вы добавить смещение дней, чтобы достичь Среды

+0

Проблема с временем, которое приходит вместе с датой. например, если ParcelRecievedDate - 2013-12-21 12: 00: 00.000, то ParcelTargetDate должен быть 2013-12-25 17: 00: 00.000 – BIQuad

+0

@BIQuad: Хорошо, теперь я обновляю свой ответ –

+0

Многие благодаря Джо! Это решило тайну очень аккуратно. – BIQuad

Смежные вопросы