PDA

View Full Version : Datum in SQL



cbe
03-11-05, 08:51
Hallo zusammen,

wenn in einer Datei ein Datumsfeld als 8-stellig numerisch gepackt abgelegt ist, z.B. also 20051103, wie kann ich dann per SQL alle Sätze vor dem heutigen Datum selektieren?

Eine Lösung wäre
FELD < (year(curdate()) * 10000 + month(curdate()) * 100 + day(curdate()))
aber bestimmt geht es auch viel einfacher wenn man weiß wie...

Gruß
Christian

Fuerchau
03-11-05, 09:00
Genau so ist es richtig !
Grund: Wenn FELD in inem Index vorkommt, kann er verwendet werden. Wird FELD per SQL in ein Datumsformat konvertiert erzwingt dies einen Tablescan (also nix mit Index).
Andererseits würde auch eine Funktion auf CURDATE einen Tablescan erzwingen, da SQL nicht abschätzen kann, ob das Ergebnis je Satz eine Konstante ist (deterministisch oder nicht).
Also ist obige Abfrage die schnellste.

Allerdings heißt das aktuelle Datum CURRENT DATE und die Klammern kann man auch sparen:
FELD < year(CURRENT DATE) * 10000 + month(CURRENT DATE) * 100 + day(CURRENT DATE)

cbe
03-11-05, 09:11
interessant wie SQL arbeitet, aber einleuchtend.

Vielen Dank für die superschnelle Antwort (war grad nur einen Kaffee holen...)!:)