Archiv der Kategorie: MS SQL Server

relationale Datenbank SQL Server 2005, 2008, 2008 R2, 2012, 2014, 2016, 2017

Berechnung der deutschen Kalenderwoche in SQL

Die datepart-Funktion des SQL-Servers liefert eine Woche zurück, wenn man wk als Parameter wählt. Dies ist allerdings nicht die Kalenderwoche. Die deutsche Kalenderwoche funktioniert nämlich so, dass die erste Woche des Jahres mit mindestens 4 Tagen in diesem Jahr die KW 1 dieses Jahres ist. Somit kann der 1.1. eines Jahres noch in der letzten KW des letzten Jahres liegen (nicht so im neuen Jahr 2009 – aber bis 2010 wollte ich nicht mit diesem Blog-Eintrag warten 🙂 )

Offensichtlich hängt die Berechnung davon ab, mit welchem Wochentag die Woche beginnt – bei uns in Deutschland mit dem Montag. Der SQL-Server verfügt über eine Einstellung @@DateFirst, die genau das angibt. Mit SET DATEFIRST 1 kann angegeben werden, dass der Monatg der 1. Tag der Woche ist. Diese Anweisung ist gültig für die Session.

In meinen hier beigefügten Skripten habe ich mich unabhängig von den Einstellungen mit DATEFIRST gemacht, so dass sie unabhängig von allen Einstellungen funktionieren und immer die deutsche Kalenderwoche zurückgeben:

select convert(nvarchar(10), getdate(), 104) Tag, dbo.getKW_Woche(getdate()) KW_Woche, dbo.getKW_Jahr(getdate()) KW_Jahr

liefert als Ergebnis

Tag KW_Woche KW_Jahr
01.01.2009 1 2009

Das bedeutet, dass der heutige Tag in der KW 1/2009 liegt, wie übrigens der 31.12.2008 auch.

In diesem Sinne, ein gutes, gesundes und erfolgreiches Neues Jahr

SQL Server: Versteckte Einstellung für Copy & Paste mit Spaltenüberschriften

Es kommt ziemlich oft vor, dass man das Ergebnis einer SQL-Abfrage (aus dem SQL Server Management Studio) in Excel weiterbearbeiten will (z.B. Filtern, Sortieren etc.). Dabei ist extrem störend, dass die Spaltenüberschriften nicht mit kopiert werden. Glücklicherweise kann man das unter Tools > Options einstellen:

Einstellungen, um die Spaltenüberschriften bei Copy&Paste mitzunehmen

PS: Danke, Stefan, für den Tip.