sql >> Databasteknik >  >> RDS >> Sqlserver

Hur fungerar SQLs konverteringsfunktion när man konverterar datetime till float?

DateTime representeras ofta som en dagräkning från ett förutbestämt datum (allmänt känt som epok) på heltalsdelen och procentandelen av dagen som har förflutit sedan midnatt på bråkdelen.

SQL Server är inte undantaget från detta, därför är konverteringen till Float mycket vettig. Dag 0 är 1 januari 1900 00:00:00 (AFAIK, i ingen speciell tidszon, så du ska betrakta det som "lokal tid").

Så du kan prova detta:

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

Så för dina resultat har 40183 dagar gått sedan 01/01/1900 00:00:00 och 01/07/2010 00:00:00

Förtydligande:Unix-liknande system använder ett annat tillvägagångssätt för att lagra datum och tider:sekunder sedan Unix-epoken (1 jan 1970 00:00:00 UTC), vilket är mer känt som epoktid.

[Redigera]Datumformatet på det här svaret ändrades till formatet ÅÅÅÅMMDD 20140416, efter några nya års erfarenhet av SQL Server (och som @Damien sa i sin kommentar) är detta det enda säkra formatet.



  1. SSIS - värdet kan inte konverteras på grund av en potentiell förlust av data

  2. mysqli_connect till fjärrserver

  3. Hur ansluter man till en MySQL-databas från en Android-app?

  4. Mysql summafråga som returnerar felaktigt resultat när du använder flera joins