Ersten Tag einer Woche ermitteln

By Frank Kalis

Posted on Jul 12, 2004 von in SQL Server

Angenommen, wir definieren den Sonntag als ersten Tag der Woche

SET DATEFIRST 7

, dann liefert

SELECT DATEADD(DAY, 1-DATEPART(dw, GETDATE()), GETDATE())
                                                       
------------------------------------------------------ 
2005-09-12 15:51:43.660

(1 row(s) affected)

zurück. Falls der Zeitanteil keine Rolle spielt, ist diese Lösung durchaus verwendbar. Etwas störend ist hingegen, daß man abhängig ist von der SET DATEFIRST Einstellung. Wenn man diese Abhängigkeit vermeiden möchte, kann man auf eine der folgenden Alternativen zurückgreifen:

SELECT
 CAST(CONVERT(CHAR(8), GETDATE(), 112) AS DATETIME)
 - 
 DATEPART(WEEKDAY, GETDATE()+@@DATEFIRST-1) + 1
                                                       
------------------------------------------------------ 
2005-09-12 00:00:00.000

(1 row(s) affected)

oder

SELECT DATEADD(wk, DATEDIFF(wk,0,GETDATE()),0)
                                                       
------------------------------------------------------ 
2005-09-12 00:00:00.000

(1 row(s) affected)

Vielfach findet so ein Algorithmus Anwendung, wenn man anhand einer gegebenen Wochennummer den ersten Tag dieser Woche herausfinden soll. In so einem Fall kann man auch auf folgendes zurückgreifen:

DECLARE @Woche INT
SET @Woche = 37
SELECT '20050101' + DATEADD(d, @Woche * 7, DATEPART(wk, '20050101') 
 - (7 - @@DATEFIRST)) - @@DATEFIRST + 1

                                                       
------------------------------------------------------ 
2005-09-12 00:00:00.000

(1 row(s) affected)

Angenehmer Nebeneffekt der letzten drei Alternativen ist, daß der Zeitanteil auf Mitternacht gesetzt wird.

Dieser Eintrag wurde eingetragen von und ist abgelegt unter SQL Server. Tags: , , , ,

Noch kein Feedback


Formular wird geladen...