Zeilen ermitteln, deren Zeitstempel größer ist als die aktuelle Zeit (SQL)?
Hallo zusammen,
Folgendes ist der Fall: es gibt eine Datenbank-Tabelle mit einem Feld "available_from", das anzeigt, ab wann der Artikel im Shop sichtbar sein soll (bspw. 2022-04-18 00:00:00).
An sich keine große Sache, es läuft nur immer wieder auf dasselbe Problem hinaus. Technisch gesehen müsste meine SQL-Query (rein partiell natürlich) so aussehen:
WHERE CURRENT_TIMESTAMP > available_from
Das geht m.W. nach jedoch nicht, ich könnte höchstens prüfen, ob available_from größer ist als der aktuelle Zeitstempel.
Ich bin mir sicher, dass es eine Lösung für dieses Problem gibt. Kennt jemand eine?
Vielen Dank und schöne Ostern!
Niklas
mit einem Feld "available_from"
Welchen Typ hat das Feld?
Datetime (YYYY-MM-DD HH:II:SS)
2 Antworten
Du musst das aktuelle Datum ja nicht unbedingt in SQL ermitteln. Das kann auch PHP, z.B. mit Carbon. Anschließend könntest du whereDate (vielleicht reicht aber auch where) verwenden, um den Wert der Spalte damit zu vergleichen.
Versuch mal das hier:
whereDate('articles.available_from', '<', Carbon::now())
Das geht durchaus so.
Was ist genau das Problem?
Irgendwas stimmt da noch nicht.
Stimmt, bei deinem hier genannten Code müssen die runden Klammern hinter CURRENT_TIMESTAMP weg. Im Gegenasatz zu GETDATE(), was du vlt. auch benutzen könntest (probiers mal) (siehe https://docs.microsoft.com/en-us/sql/t-sql/functions/current-timestamp-transact-sql?view=sql-server-ver15) , ist CURRENT_TIMESTAMP keine Funktion.
Wenn ichs direkt über den Datenbankserver ausführe, funktionieren alle diese Optionen einwandfrei. Nur wenn ich es über den Query-Builder von Laravel probiere, ist der Test-Eintrag sichtbar, obwohl er erst ab morgen 10:00 Uhr buchbar sein soll.
Muss dann wohl ein Laravel-Problem sein.
Ich arbeite mit dem PHP-Framework Laravel und habe das Problem der Verständlichkeit halber auf pures SQL heruntergebrochen. Leider sehe ich jetzt Artikel, deren Wert available_from größer als der aktuelle Zeitstempel ist. Irgendwas stimmt da noch nicht.
(Die raw-Methode ermöglicht das direkte Ausführen von SQL ohne, dass es vom Laravel Query Parser geparsed wird.)