2015-03-09 7 views
1

У меня есть представление, в котором мне нужно показать дату выходного дня для каждой строки. Я использовал следующий запрос:Выходные данные на выходные

SELECT  TOP (100) PERCENT [Delivery Date], [Delivery Method], [Order Total], YEAR([Delivery Date]) AS Year, DATEADD(d, 7 - DATEPART(dw, [Delivery Date]), [Delivery Date]) 
         AS WeekEnd 
FROM   dbo.salesdata 
ORDER BY [Delivery Date] DESC 

работает хорошо, за исключением, что дата выходные основываются на воскресенье является первым днем ​​недели, а не в понедельник, который является стандартом в Новой Зеландии.

Я осмотрел и единственный вариант, который выглядит так, как будто это будет работать, - это установить DATEFIRST, но вы не можете этого сделать в представлении.

Пожалуйста, помогите!

+0

В какой день вы ожидаете увидеть, является ли «Дата поставки» сегодня (2015-03-09)? – jtimperley

+0

Я ожидал увидеть 15-е (2015-03-15). если срок поставки - 2015-03-08, то я ожидаю увидеть 2015-03-08. – Spionred

+0

Кронштейн, какое значение вы увидите, если его 2015-03-08? Переместится ли она на следующую неделю? – jtimperley

ответ

1

Попробуйте следующее перемещение вперед в один прекрасный день, но не сработает к началу недели. Ключевым моментом здесь является модуль «%», который возвращает настроенные дни назад к началу. Если ваша неделя началась в среду, вы просто заменили бы «+ 1» на «+ 3», и все будет работать.

DATEADD(d, (7 - DATEPART(dw, [Delivery Date]) + 1) % 7, [Delivery Date]) AS WeekEnd 

SELECT TOP (100) PERCENT 
    [Delivery Date], 
    [Delivery Method], 
    [Order Total], 
    YEAR([Delivery Date]) AS Year, 
    DATEADD(d, (7 - DATEPART(dw, [Delivery Date]) + 1) % 7, [Delivery Date]) AS WeekEnd 
FROM dbo.salesdata 
ORDER BY [Delivery Date] DESC 
Смежные вопросы