Autor Beitrag
cyberax
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 247

Win XP Pro
Delphi 5 Enterprise
BeitragVerfasst: Fr 20.01.06 21:55 
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:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: 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.

_________________
Markus Kinzler.
cyberax Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 247

Win XP Pro
Delphi 5 Enterprise
BeitragVerfasst: Fr 20.01.06 22:31 
Der Feldtyp ist varchar.

Wie würde die Anweisung dann aussehen? Kenne das Cast nicht!?!?
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: 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.

_________________
Markus Kinzler.
cyberax Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 247

Win XP Pro
Delphi 5 Enterprise
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Mo 23.01.06 20:03 
user profile iconcyberax 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

ausblenden SQL-Anweisung
1:
Alter table LIEFERSCHEINB alter lieferdatum type date					

_________________
Markus Kinzler.
cyberax Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 247

Win XP Pro
Delphi 5 Enterprise
BeitragVerfasst: 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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: So 29.01.06 21:15 
Wenn der Feldtyp schon Date ist kannst du das cast weglassen. Das cast bewirkt eine Typkonvertierung.

_________________
Markus Kinzler.
cyberax Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 247

Win XP Pro
Delphi 5 Enterprise
BeitragVerfasst: 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!