2016-07-19 2 views
0

Я использую запрос ниже, чтобы получить номер недели в месяце:TSQL - SQL mumber сервера недели в месяце

datepart(day, datediff(day, 0,TABLE.DATE), 102))/7 * 7)/7 + 1 

Теперь мне нужно изменить сценарий, что если через неделю заканчивается в в следующем месяце он должен показать 1 вместо 5.

Может кто-нибудь мне помочь?

+1

Заявление не работает. '102' из скрытой части преобразования, я думаю. –

+1

@Преми, что ты дото? Вы можете показать нам свой полный запрос? – Ruhaan

+0

Дайте образцы данных, пожалуйста. – NEER

ответ

1

Используя Modulo на 4, вы можете получить номер месяца 1 вместо 5.

Для примера я тестировал с 5-й недели, и это результат как 1:

DECLARE @TestDate AS DATETIME = '2016-07-29 10:00:00'; 
SELECT CASE ((DATEPART(DAY, DATEDIFF(DAY, 0, @TestDate)) /7 * 7) /7 + 1) % 4 
     WHEN 0 THEN 4 
     ELSE ((DATEPART(DAY, DATEDIFF(DAY, 0, @TestDate)) /7 * 7) /7 + 1) % 4 END 

В запросе, вы неправильно использовали DATEPART. Фактически для этого требуется только 2 параметра.

+0

@Premi Не могли бы вы подтвердить, работает ли ответ на вас или нет. Основываясь на отзывах, мы можем добавить/обновить дополнительные пояснения. – Arulkumar

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