![]() |
Datenbank: MSSQL Server • Version: 2000 • Zugriff über: ADO
In der MSSQL-Datenbak nach Datum suchen???
Hallo!
Ich habe in der Tabelle eine Spalte namens "orderdate", in der die Datum jeder Bestellung im Format "smalldatetame" (dd.mm.yyyy) gespeichert wird. Ich möchte nun z.B. alle Bestellungen für September 2005 sehen. Die Code
Delphi-Quellcode:
scheitert mit der Meldung Die Anwendung verwendet für den aktuellen Vorgang einen Wert vom falschen Typ. Klar, dass den Wert in der Tabelle von Typ smalldatetime ist und ich es mit einem String vergleiche. Aber wie mache ich das denn nun? Parameters.ParamByName ist vom Typ Variant, da kann man also den Wert vom Typ TDateTime angeben, aber wie bringe ich mein Parameter in diesen Format?
...
var datum: string; begin with ADOQuery1 do begin active := false; sql.clear; datum := '%.09.2005'; sql.Text := 'SELECT * FROM BESTELLUNGEN' + #10 + 'WHERE orderdate LIKE :BestelltAm'; ParamCheck := true; Parameters.ParamByName('BestelltAm').Value := datum; active := true; open; end; ... |
Re: In der MSSQL-Datenbak nach Datum suchen???
Hi romber,
einen Zeitraum kannst du mit SELECT ... WHERE orderdate BETWEEN :primo AND :ultimo auswählen. Wenn du mit LIKE arbeiten willst, dann darfst du nicht mit orderdate direkt arbeiten, sondern musst mit einem CAST(orderdate AS CHAR(10)) AS c_orderdate dafür sorgen, dass der LIKE Operator den richtigen (string) Datentyp vorfindet. Grüße vom marabu |
Re: In der MSSQL-Datenbak nach Datum suchen???
Danke für schnelle Antwort!
Wie wird die Abfrage dann aussehen? |
Re: In der MSSQL-Datenbak nach Datum suchen???
So:
SQL-Code:
Oder habe ich dich falsch verstanden?
SELECT * FROM bestellungen WHERE orderdate BETWEEN :primo AND :ultimo
marabu |
Re: In der MSSQL-Datenbak nach Datum suchen???
Zitat:
SQL-Code:
es werden aber überhaupt keine Ergebnisse angezeigt.
SELECT * FROM bestellungen WHERE CAST(orderdate AS CHAR) LIKE :datum
|
Re: In der MSSQL-Datenbak nach Datum suchen???
Kein Wunder: Wenn überhaupt, dann CAST (Foo as Char (12)) oder so, Du verwandelst das Datum in genau ein Zeichen... bisserl wenig.
Mit dem like geht es zwar theoretisch, da MSSQL implizite Typunwandlungen vornimmt, aber ich wüsste nicht, in welches der vielen Datumsformate das Datum konvertiert wird. Desweiteren glaube ich nicht, das das sonderlich schnell ist. Mach es so, wie marabu es vorgeschlagen hat. |
Re: In der MSSQL-Datenbak nach Datum suchen???
Du kannst auch Date und Year verwenden bzw. Datepart:
SQL-Code:
order
Select * from Auftrag where Month(Datum) = :Monat and Year(Datum) = :Jahr
SQL-Code:
Deine ursprünglich geplante Abfrage mit LIKE würde so funktionieren:
Select * from Auftrag where Datepart(Month, Datum) = :Monat and DatePart(Year, Datum) = :Jahr
SQL-Code:
... und den Wert füllst Du dann so:
// SQL-Server konvertiert Datumswerte automatisch in Strings: yyyy-mm-dd hh:nn:ss.zzzz
Select * from Auftrag where Datum like :Datum
Delphi-Quellcode:
AdoQuery.ParamByName('Datum').AsString := FormatDateTime('yyyy-mm',dtPruefmonat)+'%';
AdoQuery.Open; |
Re: In der MSSQL-Datenbak nach Datum suchen???
Danke!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:09 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