Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie funktioniert die Konvertierungsfunktion von SQL beim Konvertieren von datetime in float?

DateTime wird häufig als Anzahl der Tage ab einem vordefinierten Datum (allgemein bekannt als Epoche) im ganzzahligen Teil und als Prozentsatz des seit Mitternacht verstrichenen Tages im Bruchteil dargestellt.

SQL Server ist davon keine Ausnahme, daher ist die Umstellung auf Float sehr sinnvoll. Tag 0 ist der 1. Januar 1900 00:00:00 (AFAIK, in keiner bestimmten Zeitzone, also sollten Sie es als "Ortszeit" betrachten).

Sie können also Folgendes versuchen:

declare @ADate DateTime;
set @ADate = '19000101 00:00:00';
select CONVERT(float, @ADate);  --should print 0
set @ADate = '19000101 12:00:00';
select CONVERT(float, @ADate);  --should print 0.5
set @ADate = '19001231 06:00:00';
select CONVERT(float, @ADate);  --should print 364.25

Für Ihre Ergebnisse sind also seit dem 01.01.1900 00:00:00 und dem 01.07.2010 00:00:00 40183 Tage vergangen

Klarstellung:Unix-ähnliche Systeme verwenden einen anderen Ansatz zum Speichern von Datums- und Uhrzeitangaben:Sekunden seit der Unix-Epoche (1. Januar 1970 00:00:00 UTC), besser bekannt als Epochenzeit.

[Bearbeiten]Das Datumsformat dieser Antwort wurde am 16.04.2014 in das Format JJJJMMTT geändert, nach einigen neuen Jahren Erfahrung mit SQL Server (und wie @Damien in seinem Kommentar sagte) ist dies das einzige sichere Format.