Aus einem date feld die woche rausfiltern

Hallo zusammen,

das ist mein erster Post hier und ich hoffe ich kriege eine kleine Hilfe oder zumindest einen Denkanstoß.
Ich selektiere verschiedene Daten aus verschiedenen Tabellen aus einer DB, unter anderem ist die Spalte spdat8 dabei, bedeutet Datum mit 8 Ziffern (20210921).
die Abfrage sieht so aus:

$result = pg_query($db,"select spdat8,spmasn,sppenr,spkzns,spkzfs,spkzss,spkos1,spkos2,psnavo,psnafa FROM kasppo INNER JOIN vepsta ON sppenr = pspenr WHERE spkos2='7001' ORDER BY spdat8,spmasn")

wie kann ich erreichen daß die Abfrage nur die Daten anzeigt die die aktuelle Woche betreffen?
bei sql gibt es ja WEEKOFYEAR, damit wäre es möglich.
habe rumgespielt mit extract und date_part aber ich kriege es nicht hin.

wie müsste meine Abfrage richtig formatiert sein daß es funktioniert?

Vielen Dank im Voraus

extract ist schon richtig:

edb=# select extract (week from current_date);
 date_part 
-----------
        38
(1 row)

edb=*# 

statt current_date halt das Datumsfeld aus Deiner Tabelle verwenden.

Wenn ich das so umbaue

$result = pg_query($db,"select extract (week from spdat8), spmasn,sppenr,spkzns,spkzfs,spkzss,sptext,spkos1,spkos2,psnavo,psnafa FROM kasppo INNER JOIN vepsta ON sppenr = pspenr WHERE spkos2='1506' OR spkos2='1510' OR spkos2='1515' OR spkos2='1525' ORDER BY spdat8,spmasn")

tut sich nichts… es wird nichts angezeigt

ja, das ist dann eher ein PHP-Problem. Es reicht nicht, die Abfrage auszuführen, Du mußt auch das Resultat anzeigen. Wie gesagt, PHP.

ja genau, das hat ja auch mit PHP zu tun…
aber ich meine, daß die schreibweise der Abfrage bestimmt Fehlerhaft ist da der Bildschirm komplett leer ist wenn ich extract… einfüge

bitte probiere die Abfrage direkt in psql aus. Wir können hier nicht Deine PHP-Fehler erraten.

Und ja: was für ein Datentyp hat die Spalte?

schon in psql gibt er mir die fehlermeldung

der DatenTyp ist numeric

Warum in aller Welt speicherst Du ein Datum als NUMERIC?

Ändere das und gut ist.

die Typen in der DB darf ich leider nicht ändern, ich möchte sie nur auslesen.

gibt es sonst keine andere Möglichkeit in psql das einzugrenzen?

die einfachste Lösung wäre kündigen. Die zweit einfachste ein CAST auf TEXT, TEXT in DATE konvertieren und darauf extract anzusetzen:

edb=*# select extract(week from to_date(20210921::numeric::text,'yyyymmdd'));
 date_part 
-----------
        38
(1 row)

edb=*# 

zu 1, wem kündigen? den Hersteller der DB? :slight_smile:

zu 2, nach deiner Hilfe und dem Umbau sieht es so aus und es klappt.

$result = pg_query($db,"select extract(week from to_date(spdat8::numeric::text,'yyyymmdd')) AS week,spdat8,spmasn,sppenr,spkzns,spkzfs,spkzss,sptext,spkos1,spkos2,psnavo,psnafa FROM kasppo INNER JOIN vepsta ON sppenr = pspenr WHERE spkos2='1506' OR spkos2='1510' OR spkos2='1515' OR spkos2='1525' ORDER BY spdat8,spmasn")

Vielen Dank

Dieses Thema wurde automatisch 60 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Antworten mehr erlaubt.