sql >> Database >  >> RDS >> Sqlserver

Hoe werkt de convert-functie van SQL bij het converteren van datetime naar float?

DateTime wordt vaak weergegeven als een dagtelling vanaf een vooraf bepaalde datum (algemeen bekend als het tijdperk) op het gehele deel en het percentage van de dag dat is verstreken sinds middernacht op het fractionele deel.

SQL Server is hierop geen uitzondering, dus de conversie naar Float is logisch. Dag 0 is 01 januari 1900 00:00:00 (AFAIK, in geen bepaalde tijdzone, dus u zult het als "lokale tijd" beschouwen).

Dus je kunt dit proberen:

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

Voor uw resultaten zijn er dus 40183 dagen verstreken sinds 01/01/1900 00:00:00 en 01/07/2010 00:00:00

Verduidelijking:Unix-achtige systemen gebruiken een andere benadering om datum en tijd op te slaan:Seconden sinds Unix-tijdperk (1 januari 1970 00:00:00 UTC), beter bekend als tijdperk-tijd.

[Bewerken]Datumformaat voor dit antwoord is gewijzigd in JJJJMMDD-formaat op 20140416, na een paar nieuwe jaren ervaring met SQL Server (en zoals @Damien zei in zijn commentaar) is dit het enige veilige formaat.



  1. Veroorzaakt door:android.database.sqlite.SQLiteException:geen dergelijke tabel:(code 1) Android

  2. Normaliseer transactiegegevens van tijd- en statuskolommen naar minuten per statuswaarde

  3. Indexen weergeven die zijn gemaakt voor een tabel in postgres

  4. SQL:twee tellingen uit verschillende tabellen vergelijken