Oracle Wochentagsermittlung

Hallo,
Ich hätte da mal ein Problem:

In einer Spalte meiner Tabelle steht die Kalenderwoche in dem Format
YYYYWW (z.b. 200508 = 8. Kalenderwoche in 2005). Jetzt brauche ich Für die Kalenderwoche das Datum des Montags in dieser Kalenderwoche als Datumsfeld.
Kann ich das ggfls. mit SQL Mitteln lösen?

Gruß und Danke im voraus

Joachim Tölg

Hallo,

das Problem ist, wenn ich mich recht entsinne, daß Du erst einmal ermitteln mußt, wann die erste Kalenderwoche beginnt. Der erste Donnerstag im Jahr muß in der ersten Kalenderwoche liegen.
Der Rest ist dann ganz einfach…

muzel

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Joachim!

In einer Spalte meiner Tabelle steht die Kalenderwoche in dem
Format
YYYYWW (z.b. 200508 = 8. Kalenderwoche in 2005).

Erstmal: Wirklich YYYYWW oder doch YYYYIW? (Der Unterschied: Die Wochenangabe WW rechnet immer vom 1. Jänner weg, d.h. die WW=01 geht jedes Jahr vom 01.01. bis zum 07.01. unabhängig vom Wochentag; IW ist die Wochenangabe laut ISO, d.h. wenn ich mich richtig erinnere ist IW 01 die Woche mit dem ersten Donnerstag eines Jahres heuer also die Woche beginnend mit dem 03.01.2005).
Zweitens: Dein Feld ist ein VARCHAR2? Dann wird’s kompliziert. Hättest du die Angabe erstmal als DATE-Feld, dann gehts recht „einfach“:
ALTER SESSION SET NLS_DATE_LANGUAGE=‚AMERICAN‘;
SELECT NEXT_DAY(mydate-7, ‚MONDAY‘) FROM dual;

NLS_DATE_LANGUAGE musst du setzen, weil sonst ‚MONDAY‘ möglicherweise nicht erkannt wird (intelligenterweise kann man der NEXT_DAY nicht mitteilen in welcher Sprache der Tag da kommen soll, ich hab’ da auch ein etwas komplizierteres Konstrukt gebastelt, mit dem sich das umgehen lässt: …NEXT_DAY(mydate-7, TO_CHAR(TO_DATE(‚20010101‘,‚YYYYMMDD‘),‚DAY‘))…

Wenn als VARCHAR2, dann sollte das hier gehen (ich gehe jetzt mal vom ISO Format aus, mit WW ist es im Prinzip gleich, nur leichter :wink:):
ALTER SESSION SET NLS_TERRITORY=‚GERMANY‘;
SELECT TRUNC(TO_DATE(‚04.01.‘||SUBSTR(mydate,1,4),‚DD.MM.YYYY‘),‚D‘)+(TO_NUMBER(SUBSTR(mydate,5,2))-1)*7 FROM dual;

NLS_TERRITORY musst du setzen, damit er als ersten Tag der Woche den Montag nimmt (bei z.B. ‚AMERICA‘ wäre es der Sonntag). Kann man evtl. auch anders machen, das Durchforsten der Doku überlasse ich aber dir :wink:.

Beste Grüße
Martin