Получить номер недели из списка дат в SQL

Я создал простой Func для нечувствительного к регистру regex, который я использую в своем фильтре.

private Func<string, BsonRegularExpression> CaseInsensitiveCompare = (field) => 
            BsonRegularExpression.Create(new Regex(field, RegexOptions.IgnoreCase));

Затем вы просто фильтруете поле в следующем виде.

db.stuff.find({"foo": CaseInsensitiveCompare("bar")}).count();
0
задан Salman A 18 January 2019 в 14:01
поделиться

5 ответов

Просто используйте функцию datepart:

select datepart(week, Date), Date,Time,EndDate,EndTime
FROM Test
WHERE (StartDate >= '01.01.2019')
ORDER BY StartDate
0
ответ дан Caldazar 18 January 2019 в 14:01
поделиться

используйте datepart(wk,date): -

select Date,Time,EndDate,EndTime,datepart(wk,date)as week
FROM Test
WHERE (StartDate >= '01.01.2019')
ORDER BY StartDate
0
ответ дан sticky bit 18 January 2019 в 14:01
поделиться

Я обычно использую функцию ROW_NUMBER() для достижения этой цели:

select 
    Date,
    Time,
    EndDate,
    EndTime, 
    ROW_NUMBER() over (partition by year(EndDate), datepart(weekday, EndDate) order by EndDate) as WeekNumInYear
FROM Test
WHERE 
    (StartDate >= '01.01.2019')
ORDER BY 
    StartDate
0
ответ дан sticky bit 18 January 2019 в 14:01
поделиться
SELECT DATEPART(WEEK,GETDATE()-14)
SELECT DATEPART(WEEK,GETDATE()-7)
SELECT DATEPART(WEEK,GETDATE())
SELECT DATEPART(WEEK,GETDATE()+7)
SELECT DATEPART(WEEK,GETDATE()+14)
0
ответ дан Gary Dixon 18 January 2019 в 14:01
поделиться

В Великобритании используется неделя ISO: первая неделя года включает 4 января.

Итак:

set datefirst 1 --this sets Monday as first day of the week 
set dateformat dmy -- nosrmal date format
select Date,Time,EndDate,EndTime,datepart(iso_week,date)as week
FROM Test
WHERE (StartDate >= '01.01.2019')
ORDER BY StartDate

Помните, что первые дни января могут быть 52-й или 53-й неделей предыдущего года, а также последний день декабря может принадлежать первой неделе нового года.

проверка, чтобы увидеть номер недели и перенести на год, к которому она принадлежит, заключается в следующем:

week_and_year = case when datepart(iso_week,date)>=52 and month(date)=1 
                           then concat(year(date)-1,datepart(iso_week,date))
                      when datepart(iso_week,date)=1 and month(date)=12
                           then concat(year(date)+1,datepart(iso_week,date))
                      else concat(year(date),datepart(iso_week,date))
                      end
0
ответ дан DDS 18 January 2019 в 14:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: