Rückgabe Erster/Letzter Tag (Datum) einer vorgegebenen Woche

funkyice

Benutzer
Beiträge
21
Hallo zusammen,

ich würde gern aus einer eingegebenen Kalenderwoche automatisch das Datum des ersten (Montag) und letzten Wochentages (Sonntag) ermitteln lassen.
Folgendes funktioniert mit der Abfrage eines Datums, weiß aber nicht, wie man das umbauen muss, damit es auch mit der Angabe einer Kalenderwoche funktioniert.
Code:
    DATEADD(WW, DATEDIFF(WW,0,@DatumX),0),     --first day week
    DATEADD(WW,DATEDIFF(WW,0,@DatumX)+1,0)-1,  --last day week

Ich möchte beim Benutzer also die Kalenderwoche abfragen, z.B. 7 und erhalte dann:
10.02.2014 und 16.02.2014

Danke für Eure Hilfe,
Sebastian
 
Werbung:
Das wäre einfach. Das suche ich leider nicht, sondern genau anders rum! ;-)

Der Benutzer gibt die Kalenderwoche vor und die Funktion generiert mir das erste und letzte Datum der Woche.
 
Irgendwie so:
Code:
DECLARE    @jahr SMALLINT,
        @woche INT

SET        @jahr = 2014
SET        @woche = 1

SELECT    datepart(ww,getdate())
SELECT    cast(cast(@jahr AS CHAR(4)) + '-01-01 00:00:00.000' AS DATETIME) +
        datepart(dw,cast(@jahr AS CHAR(4)) + '-01-01 00:00:00.000')+@woche*7 AS Wochenanfang,
        cast(cast(@jahr AS CHAR(4)) + '-01-01 00:00:00.000' AS DATETIME) +
        datepart(dw,cast(@jahr AS CHAR(4)) + '-01-01 00:00:00.000')+@woche*7+7 AS Wochenende
 
Das schaut schon nicht so schlecht aus, bei mir errechnet sich die Woche dann allerdings immer von Samstag bis Samstag.
Bei Deinem Beispiel kommt z.B. raus:
Wochenanfang: 11.1..2014
Wochenende: 18.11.2014

Haut also noch nicht ganz hin.
 
Na dann rechnest du halt noch Datum +1 was einen Tag dazu zuählt, das schaffst du ;)

Du ungültige Eingaben musst du noch Filtern bzw. den 31.12. als max Datum setzen.
 
Er gibt leider auch die falsche Kalenderwoche zurück, es ist nicht nur der eine Tag. Leider komme ich nicht dahinter, wie ich ersteres beeinflussen kann.
Wie setzt man den 31.12. als MAX Datum?
 
Hallo zusammen,

ich würde gern aus einer eingegebenen Kalenderwoche automatisch das Datum des ersten (Montag) und letzten Wochentages (Sonntag) ermitteln lassen.

Gibt es da keiner fertige Funktion für?

In PG gibt es to_date() für sowas:



Code:
test=*# select to_date('8-2014-1', 'IW-IYYY-ID');
  to_date
------------
 2014-02-17
(1 row)

IW: Iso-Week
IYYYY: Iso-Jahr
ID: ISO day of the week, Monday(1) to Sunday(7)

http://www.postgresql.org/docs/9.3/interactive/functions-formatting.html


Ist aber PostgreSQL, M$SQL kenne/nutze ich nicht.
 
Werbung:
Ne ich glaube nicht. Habe beim Googeln nur komplizierte Funktionen gefunden.

Ich habs mal etwas aufgebohrt, kann sein das es einfacher geht oder noch ein Bug drin steckt:
Code:
DECLARE    @jahr SMALLINT,
        @woche INT,
        @datumMIN DATETIME,
        @datumMAX DATETIME

SET        @jahr = 2013
SET        @woche = 53

SET        @datumMIN = cast(cast(@jahr AS CHAR(4)) + '-01-01 00:00:00.000' AS DATETIME)
SET        @datumMAX = cast(cast(@jahr AS CHAR(4)) + '-31-12 00:00:00.000' AS DATETIME)

SELECT    (    CASE
            WHEN    @woche <= 1
            THEN    @datumMIN
            WHEN    @datumMIN + 8 - datepart(dw,@datumMIN) + ( @woche - 2 )* 7 > @datumMAX
            THEN    @datumMAX
            ELSE    @datumMIN + 8 - datepart(dw,@datumMIN) + ( @woche - 2 )* 7
            END ) AS Wochenanfang,
        (    CASE
            WHEN    @datumMIN + 8 - datepart(dw,@datumMIN) + ( @woche - 2 )* 7 + 6 > @datumMAX
            THEN    @datumMAX
            ELSE    @datumMIN + 8 - datepart(dw,@datumMIN) + ( @woche - 2 )* 7 + 6
            END ) AS Wochenende
 
Zurück
Oben