Entwickler-Ecke
Datenbanken - Stringdatum auslesen SQL
D. Annies - Do 06.10.11 15:27
Titel: Stringdatum auslesen SQL
Hi, Delpher,
ich will ein Geburtsdatum der Form tt.mm.jjjj, das (leider) als String in einer Tabelle vorliegt, auf "heute Geburtstag" prüfen,
d.h. der Tag und der Monat müssen stimmen. Wie lautet denn dafür ein SQL-Befehl?
Ich habe zwei StringVariablen Tg und Mo : Integer deklariert.
Brauche ich da Parameter? Hilft LIKE da iwi weiter?
Delphi-Quelltext
1: 2: 3: 4: 5:
| format('select Name, Vorname, Klasse, Gebdat, Telefon from "%s" ' + 'where ????? = :MONAT and ????? = :TAG ' + 'order by Name, Vorname, Klasse', [TbName]); Qx.ParamByName('Tag').AsString := inttostr(Tg); Qx.ParamByName('Monat').AsString := inttostr(Mo); |
Vielen Dank für eine Hilfe,
Detlef
guinnes - Do 06.10.11 15:34
In MySQL gibts die Stringfunktionen Left, Mid, und right, damit geht es definitiv
jasocul - Do 06.10.11 15:45
guinness hat schon Recht, aber da sind auch noch viele Dinge zu beachten. Z.B.: Sind Tag und Monat immer 2-stellig?
Ich arbeite mit Oracle und dort gibt es die Möglichkeit mit der Funktion "to_date" einen String in ein Kalenderdatum zu wandeln. Wenn man dazu noch die Funktionen "Day" und "Month" auf das Datum anwendet, sollte es auch funktionieren.
D. Annies - Do 06.10.11 16:06
1. to_day wird nicht erkannt.
2. left auch nicht: (?)
Delphi-Quelltext
1: 2: 3: 4: 5:
| qx.SQL.Text := format('select Name, Vorname, Klasse, Gebdat, Telefon from "%s" ' + 'where left(gebdat,2) = :MONAT and Mid(gebdat,4,2) = :TAG ' + 'order by Name, Vorname, Klasse', [TbName]); Qx.ParamByName('Tag').AsString := inttostr(Tg); Qx.ParamByName('Monat').AsString := inttostr(Mo); |
oder habe ich es falsch benutzt?
cu, Detlef
jasocul - Do 06.10.11 16:09
D. Annies hat folgendes geschrieben : |
| 1. to_day wird nicht erkannt. |
In Oracle heißt es to_date. iirc heißte es bei Standard-SQL nur "date".
to_day habe ich nirgendwo geschrieben. :wink:
guinnes - Do 06.10.11 16:17
D. Annies hat folgendes geschrieben : |
Delphi-Quelltext 1: 2:
| Qx.ParamByName('Tag').AsString := inttostr(Tg); Qx.ParamByName('Monat').AsString := inttostr(Mo); | |
Denke daran, daß dabei u.U. ein einstelliges Datum ( Tag bzw Monat ) bei rauskommt
D. Annies - Do 06.10.11 16:19
Entschuldige meinen Schreibfehler.
Left scheint doch erkannt zu werden, aber nicht mid:
Delphi-Quelltext
1: 2: 3: 4: 5:
| qx.SQL.Text := format('select Name, Vorname, Klasse, Gebdat, Telefon from "%s" ' + 'where left(gebdat,2) = :MONAT and mid(gebdat, 4,2) = :TAG ' + 'order by Name, Vorname, Klasse', [TbName]); Qx.ParamByName('Tag').AsString := inttostr(Tg); Qx.ParamByName('Monat').AsString := inttostr(Mo); |
Habe ich etwas falsch geschrieben?
D. Annies - Do 06.10.11 17:58
Na, ja, so geht es:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| TAG_MON := inttostr(Tg) +'.' + inttostr(Mo); if TbSchueler.Fieldbyname('gebdat').DataType = ftString then begin showmessage('lets go'); qx.Close; qx.SQL.Text := format('select Name, Vorname, Klasse, Gebdat, Telefon from "%s" ' + 'where left(gebdat,5) = :TAG_MON ' + 'order by Name, Vorname, Klasse', [TbName]); Qx.ParamByName('Tag_Mon').AsString := Tag_Mon; qx.Open; |
;
bis denne,
Detlef
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!