AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi In der MSSQL-Datenbak nach Datum suchen???
Thema durchsuchen
Ansicht
Themen-Optionen

In der MSSQL-Datenbak nach Datum suchen???

Ein Thema von romber · begonnen am 17. Sep 2005 · letzter Beitrag vom 18. Sep 2005
Antwort Antwort
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#1

In der MSSQL-Datenbak nach Datum suchen???

  Alt 17. Sep 2005, 14:08
Datenbank: MSSQL Server • Version: 2000 • Zugriff über: ADO
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:
 ...
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;
...
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?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: In der MSSQL-Datenbak nach Datum suchen???

  Alt 17. Sep 2005, 14:19
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
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#3

Re: In der MSSQL-Datenbak nach Datum suchen???

  Alt 17. Sep 2005, 14:40
Danke für schnelle Antwort!

Wie wird die Abfrage dann aussehen?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: In der MSSQL-Datenbak nach Datum suchen???

  Alt 17. Sep 2005, 15:07
So:

SELECT * FROM bestellungen WHERE orderdate BETWEEN :primo AND :ultimo Oder habe ich dich falsch verstanden?

marabu
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#5

Re: In der MSSQL-Datenbak nach Datum suchen???

  Alt 17. Sep 2005, 15:13
Zitat von marabu:
SELECT * FROM bestellungen WHERE orderdate BETWEEN :primo AND :ultimo Oder habe ich dich falsch verstanden?
Das ist klar. Ich würde aber besser die CAST-Funktion benutzen. Ich habe so versucht

SELECT * FROM bestellungen WHERE CAST(orderdate AS CHAR) LIKE :datum es werden aber überhaupt keine Ergebnisse angezeigt.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: In der MSSQL-Datenbak nach Datum suchen???

  Alt 17. Sep 2005, 15:20
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.487 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: In der MSSQL-Datenbak nach Datum suchen???

  Alt 17. Sep 2005, 16:12
Du kannst auch Date und Year verwenden bzw. Datepart:

Select * from Auftrag where Month(Datum) = :Monat and Year(Datum) = :Jahr order
Select * from Auftrag where Datepart(Month, Datum) = :Monat and DatePart(Year, Datum) = :Jahr Deine ursprünglich geplante Abfrage mit LIKE würde so funktionieren:
SQL-Code:
// SQL-Server konvertiert Datumswerte automatisch in Strings: yyyy-mm-dd hh:nn:ss.zzzz
Select * from Auftrag where Datum like :Datum
... und den Wert füllst Du dann so:
Delphi-Quellcode:
AdoQuery.ParamByName('Datum').AsString := FormatDateTime('yyyy-mm',dtPruefmonat)+'%';
AdoQuery.Open;
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#8

Re: In der MSSQL-Datenbak nach Datum suchen???

  Alt 18. Sep 2005, 23:26
Danke!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz