![]() |
Datenbank: MSSQL • Zugriff über: ADO
Konvertierungsprobleme bei datetime [MSSQL]
Hallo zusammen,
ich hab ein "kleines" Konvertierungsproblem bei MSSQL. Folgendes Statement:
SQL-Code:
Um das Problem zu verdeutlichen, habe ich hier das Datum als String eingefügt, normalerweise wird es als Float im Programm verwendet.
select convert(datetime, '01.01.1900 13:00:00'),
convert(float, convert(datetime, '01.01.1900 13:00:00')), convert(datetime, convert(float, convert(datetime, '01.01.1900 13:00:00'))) Das Problem ist jetzt, dass ich nach einer Konvertierung eines Datums in Float und wieder zurück nach Datetime nicht das selbe Datum erhalte. Also '01.01.1900 13:00:00' => 0.54166666666666663 => '01.01.1900 12:59:59.997'. Vielleicht kennt ja jemand eine Lösung, wie ich das Datum nach Float und zurück konvertieren kann, ohne dass das Datum sich danach ändert :?: |
Re: Konvertierungsprobleme bei datetime [MSSQL]
Zitat:
Um dieses Rundungsproblem zu umgehen gibt es eine einfache Regel: Ein Datum(incl. Uhrzeit) bleibt solange in seinem Native-Format (also Double) bis das Datum(incl. Uhrzeit) entweder an der Benutzeroberfläche angezeigt wird oder das Programm auf anderem Wege (wird z.B. in eine TXT-Datei geschrieben) verlässt. |
Re: Konvertierungsprobleme bei datetime [MSSQL]
Hai Madlax,
warum musst Du das Datum überhaupt in einen anderen Typ konvertieren? |
Re: Konvertierungsprobleme bei datetime [MSSQL]
Hi Sharky,
naja, ich wollte testen, warum der TTime-Wert - den ich als Double eintrage - sich von dem TTime-Wert unterscheidet, den ich in Delphi vorliegen hab. Zur Erläuterung: Ich habe in Delphi einen TTime Wert (0.54166666667) der die Zeit 13:00:00 darstellt. Als ich diesen Double Wert nun per Insert-Statement eingefügt und später wieder als DateTime (.AsDateTime) ausgelesen habe, bekam ich die Zeit 12:59:59:997 zurückgeliefert. Naja, ich habe das Problem nun "gelöst", da ich den TTime Wert nicht mehr als Double sondern als String, also 13:00:00, einfüge. Trotzdem wundert mich die Konvertierung/Rundung in MSSQL immernoch, da ich eigentlich davon ausgegangen bin, dass ich nach obiger Konvertierung wieder das Ausgangsdatum bekomme. |
Re: Konvertierungsprobleme bei datetime [MSSQL]
Hai Madlax,
das würde ich so nicht machen ;-) Gerade bei Datums/Zeit - Werten arbeite ich nur mit Parametern um sie in die DB einzutragen. Der große Vorteil ist das ich mich nicht um das beim Anwender eingestellte Datums/Zeit-Format kümmern muss da ich immer TDate als Typ eintrage. Zum Beispiel:
Delphi-Quellcode:
procedure TForm1.InsertClick(Sender: TObject);
begin with ADOQuery1 do begin Close; SQL.Text := 'INSERT INTO tabelle zeitfeld VALUES (:pzeitfeld)'; Parameters.ParamByName('pzeifeld').Value := now; ExecSQL; end; end; |
Re: Konvertierungsprobleme bei datetime [MSSQL]
Ja, da hast du Recht Sharky.
Man kann aber auch vorgeben, in welchem Format das Datum formatiert werden soll, von daher denke ich mal, beide Möglichkeiten haben ihre Berechtigung ;) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:15 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 by Thomas Breitkreuz