Ich versuche, die entsprechende Wochennummer aus den Daten aufzulisten, die sich aus dieser Abfrage ergeben.

select Date,Time,EndDate,EndTime
FROM Test
WHERE (StartDate >= '01.01.2019')
ORDER BY StartDate

Grundsätzlich möchte ich der Wochenspalte die Wochennummer aus dieser Abfrage hinzufügen. Ich kann die Datenbank sowieso nicht bearbeiten, ich möchte nur die Wochennummer aus den Daten extrahieren und sie als Spalte am Ende meiner Ergebnisse haben.

Beispieldaten unten:

Results

0
Nareik 18 Jän. 2019 im 16:41

5 Antworten

Beste Antwort

Normalerweise verwende ich die Funktion ROW_NUMBER(), um dies zu erreichen:

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
-1
sticky bit 18 Jän. 2019 im 13:52

Verwenden Sie einfach die Datepart-Funktion:

select datepart(week, Date), Date,Time,EndDate,EndTime
FROM Test
WHERE (StartDate >= '01.01.2019')
ORDER BY StartDate
1
Caldazar 18 Jän. 2019 im 13:46

Benutze datepart(wk,date): -

select Date,Time,EndDate,EndTime,datepart(wk,date)as week
FROM Test
WHERE (StartDate >= '01.01.2019')
ORDER BY StartDate
1
sticky bit 18 Jän. 2019 im 13:51

In Großbritannien wird die ISO-Woche verwendet: Die Woche des ersten Jahres umfasst den 4. Januar.

So:

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

Denken Sie daran, dass die ersten Tage im Januar die 52. oder 53. Woche des Vorjahres sein können und auch der letzte Tag im Dezember zur ersten Woche des neuen Jahres gehören kann.

Die Überprüfung, um die Wochennummer anzuzeigen und auf das Jahr zu verschieben, zu dem sie gehört, lautet wie folgt:

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
1
DDS 18 Jän. 2019 im 14:10
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 Jän. 2019 im 13:46