PHP Abfrage current_date Problem

Hallo liebe Community,

ich habe folgendes Problem:

Ich m�chte eine Abfrage der Postgresql Datenbank per PHP fertigstellen. Dazu ist es n�tig, dass wenn die PHP Seite aufgerufen wird immer nach Eintr�ge mit dem heutigen Datum abzufragen, jedoch scheint es ein Problem der Formatierung zu geben.

Soll ein Belegungsplan von R�umen geben, mit Hilfe der Kalendereintr�ge.

Hier mal ein Teil der Abfrage:

SELECT created_from, timestampfield01, timestampfield02, field02, field01 FROM prg_dates WHERE field02 = 'Besprechungsraum'  AND timestampfield01 = current_date

Diese Abfrage ergibt kein Ergebnis, au�er man will timestampfield01 >= current_date, dann wird er korrekt ausgef�hrt.

Das Datum+ Zeit ist in der Datenbank wie folgt eingetragen: 02.07.2012 00:00:00 (manchmal mit Zeit und manchmal ohne Zeit, da Termine entweder von bis oder ganzt�gig)

Komischerweise wenn ich in der Abfrage ein bestimmtes Datum eingeben von dem ich wei�, dass es existiert , auch nichts ausgibt.

Gibt es eine M�glichkeit in die Abfrage einzubauen eine Art current_date + 2 Tage? Das w�rde schon komplett ausreichen.
Sollte wenn m�glich am Ende eine einzige Abfrage sein.

Danke schonmal im voraus.

Wenn die Spalte timestampfield01 mal eine Uhrzeit enthält und mal nicht, dann solltest Du die Uhrzeit “entfernen” bevor Du sie mit current_date vergleichts:

AND date_trunc('day', timestampfield01) = current_date

(Das verhindert aber die Verwendung eines Index auf “timestampfield01”. Wenn das wichtig wäre, dann musst du einen Index auf den Ausdruck: date_trunc(‘day’, timestampfield01) anlegen.

current_date hat immer “00:00:00” als Uhrzeit (stimmt so nicht ganz, weil es eigentlich gar keine Uhrzeit hat). Beim Vergleich mit einem Timestamp wird die Bedingung daher nur erfüllt sein, wenn der Timestamp auch “00:00:00” hat.

Zu Deiner zweiten Frage:

eine Art current_date + 2

Klar:

current_date + interval '2' day

Oder aber zu DATE casten: timestampfield01::date = current_date, und bei Bedarf Index anlegen … (darf aber kein timestampTZ sein)


Andreas

Vielen Dank für die Anworten.

So wie ich es jetzt verstanden habe, muss ich wohl oder übel die Datenbank verändern.
Leider kann ich das nicht machen, ist ein ziemlich großes und altes System.
In einer reinen Abfrage ist es also nicht möglich?

Dann hast Du das falsch verstanden.

Nimm entweder date_trunc() (so wie von mir gezeigt) oder einen cast (so wie von Andreas gezeigt). Ändern musst Du nur Dein Statemetn.
Der Index ist nur notwendig, wenn Deine Abfrage zu langsam ist.

In einer reinen Abfrage ist es also nicht möglich?

Doch, so wie ich es Dir gezeigt habe.

Danke hat soweit alles geklappt :slight_smile:

Habe jetzt nur noch falsch angezeigt Umlaute, wie bekomm ich die wieder hin?

Gibt es eine Funktion zum umwandeln?

Let me google that for you

Andreas