2010-02-23 2 views
20

Получить номер недели от даты в T-SQLПолучить номер недели от даты в T-SQL

+0

В соответствии с какой схемой нумерации в неделю? –

+1

какая неделя нумерация system? ISO? –

+0

и какую версию SQL Server вы используете? Это может иметь значение, если вы хотите номер недели ISO – AdaTheDev

ответ

42

Посмотрите DATEPART

SELECT DATEPART(wk, GETDATE()) 
+0

Как насчет количества недель между двумя датами @startdate и @enddate –

+0

Попробуйте найти число недель между переменными. SELECT DATEPART (wk, @enddate) - DATEPART (wk, @startdate) –

+0

Вот подробный ответ и почему использовать DATEPART (ISO_WEEK, GETDATE()) - http://dba.stackexchange.com/a/38682/ 100185 – HEDMON

2

Или использовать DATEDIFF как это: DATEDIFF(wk,GETDATE(),GETDATE()+7) найти количество недель между двумя днями

10

лучше всего использовать следующее:

выберите DATEPART (ISO_WEEK, GetDate())

Как и когда у вас есть год с неделей 53, как в случае с 2015 годом, он дает ненадежные результаты. (Конечно, на 2008 R2)

выберите DATEPART (WK, '01/03/2016')

дает различные результаты около недели 53. При запуске через неделю после 3-го января он произвел значение 1. При запуске в настоящее время на ту же дату, что дает значение 2.

+0

Кроме того, 'ISO_WEEK' предполагает, что неделя начинается по понедельникам и начинает отсчет (1) в первый понедельник, который встречается в этом году. 'WK' предполагает, что неделя начинается по воскресеньям и начинает отсчет (1) в новый день, независимо от того, в какой день. – Heliac

+0

... в противном случае (как указал Эван) 'WK' начинает отсчет с 2 в первое воскресенье, встречающееся в этом году, если дата в прошлом. – Heliac

0

ИСО год также может быть вычислен:

YEAR(DATEADD(DAY, (4 - DATEPART(WEEKDAY, End_Date)), End_Date)) 

который обрабатывает первый день года в неделе предыдущего календарного года.