Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Sql Datum vergleich (https://www.delphipraxis.net/20174-sql-datum-vergleich.html)

Reini64 14. Apr 2004 12:12


Sql Datum vergleich
 
Hi,

ich habe folgendes Problem:

wie kann ich mit Sql ein Datum vergleichen


Delphi-Quellcode:

   such_datum := "13.04.2004";
   dm_auftrag.q_selbstbucher.SQL.Text :=
        'select lanme, lname2, lpz, lort, versand_id, versand_datum from bestellung where ' +
        ' SUBSTRING( versand_datum from 1 for 10 ) = ' + #34 + such_datum + #34 +
        ' group by versand_id' ;
Danke für die Unterstützung

Gruß

Reinhard

Hansa 14. Apr 2004 12:16

Re: Sql Datum vergleich
 
Welchen Typ hat das "versand_datum" in der DB ? Und was ist das :

SQL-Code:
versand_datum from 1 for 10
:?: Noch nie gesehen. 8)

Robert_G 14. Apr 2004 13:09

Re: Sql Datum vergleich
 
Moin Reinhard :hi:

Liegt Versand_Datum als Datum in der DB vor, dann kann es, wenn die Regionaleinstellungen des DB Servers von denen des Clients abweichen, ganz schnell nach hinten losgehen.
Denn bei der implizierten Umwandlung Date->String / String->Date entscheiden nunmal die Regionaleinstellungen.
Wenn du das Ganze in der Art wie im Code-Schnipsel machst, dann wird exakt ein Datum mit einem Datum verglichen.
Weder der Client noch die DB haben dann noch eine Möglichkeit irgendwelchen Mist zu bauen. (Oft gesehen: Tag & Monat vertauscht)

Delphi-Quellcode:
Var
  such_Datum :TDate;
  //...
Begin
  //...
  Such_Datum := EncodeDate(2004, 04, 13);
  With DM_Auftrag.Q_Selbstbucher Do
  Begin
    SQL.Text :=
      'SELECT lName' + #10 +
      '     ,lName2' + #10 +
      '     ,lPz' + #10 +
      '     ,lOrt' + #10 +
      '     ,Versand_ID' + #10 +
      '     ,Versand_Datum' + #10 +
      'FROM  Bestellung' + #10 +
      'WHERE Versand_Datum = :i_Such_Datum' + #10 +
      'GROUP BY Versand_ID';
    // Parsen des Statements um Query Parameter zu finden...
    Prepared := True;
    // Werte an Query Parameter übergeben...
    With Parameters.ParamByName('i_Such_Datum') Do
    Begin
      DataType := ftDate;
      Value := Such_Datum;
    End;
    Open;
    //...
  End;

Reini64 14. Apr 2004 13:31

Re: Sql Datum vergleich
 
Also das versand_datum ist eine DateTime (13.04.2004 18:43:12) Datenfeld

Gruß
Reinhard

Reini64 14. Apr 2004 20:41

Re: Sql Datum vergleich
 
Habe die lösung selber gefunden !

Das Edit1.text ist das gesuchte Datum (13.04.2004).
Delphi-Quellcode:
    stag  := copy(edit1.Text,0,2);
    smonat := copy(edit1.Text,4,2);
    sjahr := copy(edit1.Text,7,4);

    dm_auftrag.q_selbstbucher.Close;

    dm_auftrag.q_selbstbucher.SQL.Text :=
       ' select (lname + " " + lname2) as name, lplz, lort, versand_id from bestellung ' +
       ' where extract(Day from versand_datum) =' +  stag +
       ' and extract(month from versand_datum) =' + smonat +
       ' and extract(year from versand_datum) =' + sjahr +
       ' group by versand_id order by versand_id ';

    dm_auftrag.q_selbstbucher.Open;
Gruß

Reinhard :coder:

Robert_G 14. Apr 2004 20:55

Re: Sql Datum vergleich
 
:mrgreen:
Wenn du jetzt noch einen TDateTimePicker nimmst, dann klapt das:

SQL-Code:
  With DM_Auftrag.Q_Selbstbucher Do
  Begin
    SQL.Text :=
      'SELECT lName' + #10 +
      '     ,lName2' + #10 +
      '     ,lPz' + #10 +
      '     ,lOrt' + #10 +
      '     ,Versand_ID' + #10 +
      '     ,Versand_Datum' + #10 +
      'FROM  Bestellung' + #10 +
      'WHERE Versand_Datum = :i_Such_Datum' + #10 +
      'GROUP BY Versand_ID' + #10 +
      'ORDER BY Versand_ID';
    // Parsen des Statements um Query Parameter zu finden...
    Prepared := True;
    // Werte an Query Parameter übergeben...
    With Parameters.ParamByName('i_Such_Datum') Do
    Begin
      DataType := ftDate;
      Value := DateTimePicker1.Date;
    End;
    Open;
    //...
  End;
Auf die Art muss das Statement durch solche in den String konkatinierte Werte entstellt werden. Außerdem kann der User nur noch gültige Datumswerte angeben. ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:04 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