Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Select auf Datetime Spalte (https://www.delphipraxis.net/62058-select-auf-datetime-spalte.html)

renekr 30. Jan 2006 14:16

Datenbank: sql • Version: 2005 • Zugriff über: ADO

Select auf Datetime Spalte
 
Hallo,

Kann mir bitte mal jemand auf die Sprünge helfen :

Ich habe in einer Tabelle einen Datetime Wert drin stehen.
Diesen will ich mittels Select * from auslesen.

Ich will aber nun einen Select machen der auf das DateTime geht.

Das geht nicht weil ich das Dateum convertieren muß für den SQL server 2005-31-01 01:01:00.

Jetzt will ich noch genau den Datensatz zurück bekommen der heute eingetragen ist.

Das kalppt aber nicht,weil ich beim Insert das Date+Time reinschreibe und da sind ab und zu die millisecunden nicht 000 sonder 416 oder so.

Damit bekomme ich den Datensatz von heute nicht weil die MS nicht 000 sind.


Hat da jemand eine Lösung?
Danke

Angel4585 30. Jan 2006 14:41

Re: Select auf Datetime Spalte
 
ich würde die zeit beim Reinschreiben runden.

(Hab keine Ahnung von SQL und so aber das ist ne - für mich - allgemeine Lösung)

MPirnstill 30. Jan 2006 15:11

Re: Select auf Datetime Spalte
 
Hi!

Schau mal in der M$-SQL-Server-Hilfe unter "DATEPART" oder unter CONVERT nach. Wenn du dein Datumsfeld in der WHERE-Bedingung deines SQL damit entspr. umsetzt müstest du auch mit einem einfachen Datum abfragen können.
Vielleicht hilft dir das weiter.

Gruß

alzaimar 30. Jan 2006 15:26

Re: Select auf Datetime Spalte
 
Es gibt eine hübsche geheime (weil kaum erwähnte) Formatierung für Datumsangaben, sodaß jeder SQL-Server auf der ganzen Welt damit klar kommt, egal welches Datumsformat denn nun eingestellt ist. Das ist doch praktisch, oder?

SQL-Code:
Select * from Tabelle where Datumsfeld = {d '2006-01-30'} -- nur Datum
Select * from Tabelle where Datumsfeld = {ts '2006-01-30 10:20:30'} -- Datum und Uhrzeit
Angeblich ist das eine ODBC-Formatierung, das funktioniert aber auch mit JDBC oder ADO 2.8

Weiterhin sollte man DateTime angaben nicht auf Gleichheit prüfen, obwohl das als BCD implementiert (also genau) ist. Verwende einfach ein "BETWEEN Heute 0:00 AND Heute 23:59:59". Konvertierungen oder DatePart sind Quatsch, da dann SQL keinen Index mehr verwenden kann und das ist u.U. ein Gau (Tabelle mit 100.000.000 Einträgen).

Um also alle Einträge des 30.1.2006 zu finden, reicht das hier:

SQL-Code:
Select * From Tabelle Where Datumsfeld between {ts '2006-01-30 00:00:00'} and {ts '2006-01-30 23:59:59'}

renekr 30. Jan 2006 16:34

Re: Select auf Datetime Spalte
 
Hi @,

Erstmal Danke für die schnelle Hilfe.

Das mit dem Between war mir klar aber viel arbeit. oder ich muß die convert funktion von unten nehmen und die ms einzeln mit between,aber oje.
Ich habe halt das Thema das ich meldungen mit DateTime abspeichere

Delphi-Quellcode:
'{ ts' + QuotedStr(FormatDateTime('yyyy-mm-dd hh":"nn":"ss', Value)) + ' }';
Eigentlich dürfte ja da die Millisec nicht mit abgespeichert werden.
Aber ab und zu sten da ungerade ms drin ,also zb.465.

Und ich lese die Datumsfelder in eine Listbox und per Klick auf die Lsitbox wird nach dem Klick auf eine Spalte ein Select auf die Tabelle gemacht mit dem Datetime von der Listbox ( selected Feld).

Ich weiß das ist nicht besonders schön,aber geht nicht anderst.

mfg


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