![]() |
Datenbank: Absolute Database • Version: 5.04 • Zugriff über: ABS.Query Komponente
SQL ABfrage von Datum Zeit bis Datum Zeit über mehrere Tage
Hallo !
Ich möchte mit einer SQL-Abfrage alle Datensätze haben, die zwischen vonDatum vonZeit und bisDatum bisZeit liegen. Im Formular gibt es 6 Eingabemöglichkeiten: vonDatum : DateTimePicker bisDatum : dateTimePicker vonDatumVonZeit : maskEdit liefert einen String vonDatumBisZeit : maskEdit .... bisDatumVonZeit : maskEdit .... bisDatumBisZeit : maskEdit .... in der Datenbank habe ich ein Feld Datum Typ Date und ein Feld ZEIT typ String. Wie müsste der SQL Befehl aussehen, damit ich alle Datensätze erhalte, die zwischen dem 03.03.2006 / 02:00:00 Uhr und dem 04.03.2006 / 03:00:00 Uhr liegen ? Ich habe es folgendermassen probiert :
Delphi-Quellcode:
Hier erhalte ich aber nur Datensätze, die vom 03.04.2006 ab 02:00:00 bis 03:00:00 liegen.
SQL_TEXT := SQL_TEXT +
' Where (DATUM >= :voDatum and Zeit >=:vonZeit) '+ 'and (DATUM <= :biDatum and ZEIT <=:bisZEIT)'; cxMemo.Lines.Add(SQL_TEXT); ABSQuery.SQL.Add(SQL_TEXT); with ABSQuery.Params do begin ParamValues['voDatum'] :=DateToStr(vonDatum.Date); ParamValues['vonZeit'] :=edVonDatvonZeit.Text; //ParamValues['vonLeer'] :='23:59:59'; ParamValues['biDatum'] :=DateToStr(bisDatum.Date); //ParamValues['bisLeer'] :='00:00:00'; ParamValues['bisZEIT'] :=edbisDatbisZeit.Text; end; Was stimmt hier nicht ? |
Re: SQL ABfrage von Datum Zeit bis Datum Zeit über mehrere
Also es bei deiner Konstellation nicht so einfach möglich, das erwünscht Egebnis zu erzielen. Wäre Datum und Unrzeit in einem datetime-Fels würde eine einfache between-Bedingung ausreichen:
SQL-Code:
So mußt du aber deine Abfrage in 3 Schritten ausführen:
...Where (DATUM between :voDatum and :bisDatum )
1.) Termine am Starttag von StartZeit bis 24:00 2.) Termine zwischen vondatum +1 bis bisDatum -1 2.) Termine am Endtag von 0:00 - EndZeit.
SQL-Code:
...Where ( DATUM = :vonDatum AND ZEIT >= :vonZeit) union ...
(DATUM between :voDatum2 and :bisDatum2 ) union ... ( DATUM = :bisDatum AND ZEIT <= :bisZeit) |
Re: SQL ABfrage von Datum Zeit bis Datum Zeit über mehrere
Vielen Dank für die rasche Antwort, leider habe ich von SQL noch nicht allzu viel am Hut.
Deswegen meine Frage was genau bewirkt union ? |
Re: SQL ABfrage von Datum Zeit bis Datum Zeit über mehrere
Hi!
Vielleicht hilft dir dann das hier weiter: ![]() Ciao Frederic |
Re: SQL ABfrage von Datum Zeit bis Datum Zeit über mehrere
union vereinigt mehrere Abfragen zu einer Ergebnismenge:
z.B. Tabelle1 Name Vorname Müller Hans Maier Peter Tabelle2 Name Vorname Schmitt Susi
SQL-Code:
Ergebnis:
Select name, vorname from tabelle1 union select name, vorname from tabelle2;
Name Vorname Müller Hans Maier Peter Schmitt Susi |
Re: SQL ABfrage von Datum Zeit bis Datum Zeit über mehrere
Hallo.
Auf Intervallbildung und Mengenvereinigung kann vielleicht verzichtet werden, wenn man ein etwas komplexeres SQL-Statement in Kauf nimmt. Immerhin kennt ABS laut Handbuch die Funktionen TODATE(), TOSTRING() und CAST(). Aber um die ursprüngliche Frage nochmal aufzugreifen: Zitat:
Freundliche Grüße vom marabu |
Re: SQL ABfrage von Datum Zeit bis Datum Zeit über mehrere
Vielen Dank mKinzler und fKerber,
Habe es nun mit union versucht, hier der Code :
Delphi-Quellcode:
Hier erhalte ich allerdings folgende Fehlermeldung ?
SQL_TEXT := SQL_TEXT +
' Where (DATUM = :voDatum and Zeit >= :vonZeit) union'+ ' (DATUM between :voDATUM2 and :biDATUM2) union '+ 'and (DATUM = :biDatum and ZEIT <= :bisZEIT)'; cxMemo.Lines.Add(SQL_TEXT); ABSQuery.SQL.Add(SQL_TEXT); with ABSQuery.Params do begin ParamValues['voDatum'] :=DateToStr(vonDatum.Date); ParamValues['vonZeit'] :=edVonDatvonZeit.Text; ParamValues['voDatum2'] :=DateToStr(vonDatum.Date +1); ParamValues['biDatum'] :=DateToStr(bisDatum.Date); ParamValues['biDatum2'] :=DateToStr(bisDatum.Date -1); ParamValues['bisZEIT'] :=edbisDatbisZeit.Text; end; Im Projekt .... ist eine Exception der Klasse EABSException aufgetreten. Meldung : "Token 'Select' expected , but 'Datum' at line 1, column 79 - Native Error 30194 ! Hängt das etwa mit dem WOrt Datum zusammen, vielleicht ein reserviertes Wort ? |
Re: SQL ABfrage von Datum Zeit bis Datum Zeit über mehrere
Das UNION vereinigt meherere SQL-Statements deshalb mußt du nach dem Union das 'Select ...where ' wiederholen.( siehe auch allg. Bsp von mir oben)
|
Re: SQL ABfrage von Datum Zeit bis Datum Zeit über mehrere
Hallo zusammen und besten Dank an alle hier, es hat geklappt !!
Nach dem letzten Hinweis von mKinzler Zitat:
Hier das Ergebnis des geänderten Codesnippet für alle die sowas ähnliches suchen
Delphi-Quellcode:
Mein Problem ist hiermit gelöst, habt nochmals Dank! PS: Als Neuling vielleicht noch eine Frage, muß ich den Thread hier nun schließen ? Oder was muß ich jetzt tun, damit dieser thread geschlossen wird ?
SQL_TEXT :=
'SELECT * from nLeerscan ' + ' Where (DATUM = :voDatum and Zeit >= :vonZeit) union'+ ' (Select * from nLeerscan where DATUM between :voDATUM2 and :biDATUM2) union '+ ' (Select * from nLeerscan where DATUM = :biDatum and '+ 'ZEIT <= :bisZEIT) order by Datum , Zeit'; cxMemo.Lines.Add(SQL_TEXT); ABSQuery.SQL.Add(SQL_TEXT); showmessage(absQuery.sql.text); with ABSQuery.Params do begin ParamValues['voDatum'] :=DateToStr(vonDatum.Date); ParamValues['vonZeit'] :=edVonDatvonZeit.Text; ParamValues['voDatum2'] :=DateToStr(vonDatum.Date +1); ParamValues['biDatum'] :=DateToStr(bisDatum.Date); ParamValues['biDatum2'] :=DateToStr(bisDatum.Date -1); ParamValues['bisZEIT'] :=edbisDatbisZeit.Text; end; |
Re: SQL ABfrage von Datum Zeit bis Datum Zeit über mehrere
Hi!
[quote="nachtstreuner"]Mein Problem ist hiermit gelöst, habt nochmals Dank! PS: Als Neuling vielleicht noch eine Frage, muß ich den Thread hier nun schließen ? Oder was muß ich jetzt tun, damit dieser thread geschlossen wird ? quote] Es bleibt einfach alles so wie es ist. So können auch andere, die noch ne Frage dazu haben, etwas hier in den Thread posten. Nur, wenn du eine Frage als "offen" markiert hast, dann solltest du diese Markierung nach Beantwortung der Frage entfernen. Ciao Frederic |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz