Kalenderwochen und SQL

Der SQL Server von Microsoft scheint Kalenderwochen nicht nach DIN 1355 zu berechnen. Gibt man im Query-Analyser

select DATEPART ( week , getdate() )

am heutigen Datum (21.12.2005) ein, bekommt man als Antwort die 52. Kalenderwoche. Laut DIN 1355 müßte das aber die 51. sein.

Leider gibt es zumindest auf Seiten des SQL-Servers keinen Workaround für das Problem, also muss man es halt programmatisch lösen:

DateTime dt = DateTime.Now; System.Globalization.Calendar calender = CultureInfo.CurrentCulture.Calendar; int weekofyear = calender.GetWeekOfYear(dt, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday);

Dann stimmt´s auch wieder mit mit den Wochen ;)

Update
Es geht sogar mit SQL .. was ich um einiges eleganter finde ;)

set @date = getdate() select @ISOweek = datepart(wk,@date)+1-datepart(wk,’Jan 04,’+CAST(datepart(yy,@date) as CHAR(4))) if (@ISOweek=0) select @ISOweek=datepart(wk, ‚Dec ‚+ CAST(24+datepart(day,@date) as CHAR(2))+‘,’+CAST(datepart(yy,@date)-1 as CHAR(4)))+1

One thought on “%1$s”

  1. Die Transact-SQL-Funktion arbeitet NICHT DIN1355-konform.

    Beweis durch Widerspruch: der 31.12.2008 gehört zur KW1 von 2009. Die SQL-Funktion liefert jedoch KW53. 2008 hat aber keine 53 KW’s, da es weder mit einem Donnerstag beginnt, noch mit einem Donnerstag endet.

    Das ist auch wunderbar nachzuprüfen auf www.kalender-365.de

Comments are closed.