Entwickler-Ecke
Datenbanken - Datumsvergleich mit Sql Abfrage
cyberax - Fr 20.01.06 21:55
Titel: Datumsvergleich mit Sql Abfrage
Hallo, ich möchte mit einer SQL Abfrage aus einer Tabelle alle Zeile zurückgeliefert haben, in der der bestimmte wert - in meinem Fall "Lieferdatum" - < ist als das heutige DAtum.
So sieht meine Abfrage aus:
Delphi-Quelltext
1:
| sql.text:= 'Select * from LIEFERSCHEINDB where lieferdatum < '+quotedstr(heute); |
Nun wird aber nur der Tag richtig ausgewertet, dass heißt für die Abfrage ist der 15.02.2006 immer noch kleiner als der 18.01.2006. Wie kann ich das mit dem Datumsvergleich realisieren?
MFG DV
mkinzler - Fr 20.01.06 22:00
Was für ein Feldtyp hat lieferdatum ?
Wenn das Feld nicht vom Typ Date/DateTime o.aä. ist dann hilft vielleich ein CAST.
cyberax - Fr 20.01.06 22:31
Der Feldtyp ist varchar.
Wie würde die Anweisung dann aussehen? Kenne das Cast nicht!?!?
mkinzler - Fr 20.01.06 22:38
Ich hab mir schon gedacht, das der Feldtyp nicht Date ist. Denn die Sortierung ist bei Strings von links nach rechts, d.h. 18 ist nunmal größer als 15.
Select * from LIEFERSCHEINDB where cast(lieferdatum as date) < '+quotedstr(heute);
Wenn es möglich ist würde ich aber den Feldtyp von varchar auf date ändern.
cyberax - Mo 23.01.06 19:24
Leider funktioniert das mit CAST genauso, wie ohne. Kann das daran liegen, dass ich noch mit Mysql 4.0.12 arbeite??
Ich habe auch versucht den Feldtyp von varchar auf date zu stellen, aber ich weis nicht genau, wie ich dann die SQL Abfrage formulieren soll?!??
mkinzler - Mo 23.01.06 20:03
cyberax hat folgendes geschrieben: |
Leider funktioniert das mit CAST genauso, wie ohne. Kann das daran liegen, dass ich noch mit Mysql 4.0.12 arbeite??
Ich habe auch versucht den Feldtyp von varchar auf date zu stellen, aber ich weis nicht genau, wie ich dann die SQL Abfrage formulieren soll?!?? |
Exportiere die Tabelle in eine SQL-Skript (Metadaten + Daten), Tabelle löschen, im Skript Feldtyp ändern und Skript ausführen.
Oder
SQL-Anweisung
1:
| Alter table LIEFERSCHEINB alter lieferdatum type date |
cyberax - So 29.01.06 21:12
Also, der Feld - Typ der Tabelle ist von varchar auf date umgestellt. Aber das ganze funktioniert leider nicht richtig.
Delphi-Quelltext
1:
| sql.text:='SELECT * from lieferschein where cast(liefertermin as date) <'+quotedstr(jetzt); |
Sorum werden gar keine Ergebnisse zurückgeliefert und wenn das '<' anders herum dasteht, dann werden auch die Einträge zurückgeliefert, wo liefertermin kleiner ist als das Datum heute (jetzt).
?!?
Ist doch eigentlich keine schwere Sache, aber wieso funktioniert das nicht?
Was bewirkt das Cast?
mkinzler - So 29.01.06 21:15
Wenn der Feldtyp schon Date ist kannst du das cast weglassen. Das cast bewirkt eine Typkonvertierung.
cyberax - Mo 30.01.06 22:59
Okay. Also auch ohne Cast funktioniert das so nicht. Habe das Problem nun ganz anders gelöst, indem ich noch einen Eintrag in die Tabelle schreibe, woran ich erkenne ob das Datum größer oder kleiner als heute ist.
Trotzdem vielen Dank für die Hilfe!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!