Kalenderwochen aus einem Datumsbereich ermitteln

Hallo,
ich habe ein Anfangs und Endatum und sollte die Kalenderwoche + Jahr rausbekommen.
Kann mir jemand weiter helfen?

Danke

gruß
Andreas



test=*# select datum, extract(week from datum) as woche, extract(year from datum) as jahr from (select current_date + s*'1day'::interval as datum from generate_series(1,10) s)  foo;
        datum        | woche | jahr
---------------------+-------+------
 2011-05-20 00:00:00 |    20 | 2011
 2011-05-21 00:00:00 |    20 | 2011
 2011-05-22 00:00:00 |    20 | 2011
 2011-05-23 00:00:00 |    21 | 2011
 2011-05-24 00:00:00 |    21 | 2011
 2011-05-25 00:00:00 |    21 | 2011
 2011-05-26 00:00:00 |    21 | 2011
 2011-05-27 00:00:00 |    21 | 2011
 2011-05-28 00:00:00 |    21 | 2011
 2011-05-29 00:00:00 |    21 | 2011
(10 Zeilen)

Andreas

hmm, nicht ganz das was ich meinte:
ich habe einen bekannten datumsbereich, für den ich die KW und Jahr will:
Also Beispiel: 01.05.2011 - 26.05.2011:
18 2011
19 2011
20 2011
21 2011

Vielleicht stell ich mich auch einfach grade doof an :slight_smile:

extract() ist Dein Freund. Beispiel: siehe Beispiel. Und Doku.

Andreas

EXTRACT kapier ich denk ich, da bekomm ich die Woche und das Jahr heraus, aber wie kann ich ohne eine vorhandene Tabelle einen datumsbereich angeben…
Irgendwie check ich es grade nich.

ich mein wenn ich eine Tabelle hätte, sähe es so aus:

select EXTRACT(WEEK from datum), EXTRACT(YEAR FROM datum) FROM DATUMS_TABELLE where datum BETWEEN ‘2011-01-01’ AND ‘2011-05-03’

Dann baust Dir halt schnell einen Tabelle ‘on the fly’:

test=*# select distinct extract(week from datum) as woche, extract(year from datum) as jahr from (select '2011-05-01'::date + s*'1day'::interval as datum from generate_series(0,25,1) s)  foo;
 woche | jahr
-------+------
    17 | 2011
    20 | 2011
    18 | 2011
    19 | 2011
    21 | 2011
(5 Zeilen)

Im inneren läuft:

 select '2011-05-01'::date + s*'1day'::interval as datum from generate_series(0,25,1) s;

Das ermittelt ab dem 1. Mai die nächsten n Tage bis zum 26. Mai.
Das an extract() verfüttern.

Andreas

ich glaub jetzt hab ich es:

select distinct extract(week from datum) as woche, extract(year from datum) as jahr from (select ‘2011-01-01’::date + s*‘1day’::interval as datum from generate_series(0,(date(‘2011-08-01’) - date(‘2011-01-01’)),1) s) foo;


passt doch oder ? :slight_smile:

hmm wieder quatsch, naja ich versuchs weiter

ok so schlecht uist es gar nich, hab mich verschaut, seltsamerweise bringt er in der ausgabe die kw 1 - 31 und zusätzlich die kw 52, hast du eine erklärung dafür?


Danke
Gruß

Andreas

Ja. Der 1.1. liegt noch in der letzten KW des Vorjahres. Setzen.


Andreas

Das liegt ganz am verwendeten Kalender :wink: