Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment fonctionne la fonction de conversion de SQL lors de la conversion de datetime en float ?

DateTime est souvent représenté comme un nombre de jours à partir d'une date prédéterminée (généralement connue sous le nom d'époque) sur la partie entière et le pourcentage du jour écoulé depuis minuit sur la partie fractionnaire.

SQL Server ne fait pas exception à cela, donc la conversion en Float a beaucoup de sens. Le jour 0 est le 01 janvier 1900 00:00:00 (autant que je sache, dans aucun fuseau horaire particulier, vous devez donc le considérer comme "l'heure locale").

Donc, vous pouvez essayer ceci :

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

Donc, pour vos résultats, 40183 jours se sont écoulés depuis le 01/01/1900 00:00:00 et le 07/01/2010 00:00:00

Clarification :les systèmes de type Unix utilisent une approche différente pour stocker les dates et heures :secondes depuis l'époque Unix (1er janvier 1970 00:00:00 UTC), qui est plus connue sous le nom d'heure d'époque.

[Modifier] Le format de date de cette réponse a été changé au format AAAAMMJJ le 20140416, après quelques nouvelles années d'expérience avec SQL Server (et comme @Damien l'a dit dans son commentaire), c'est le seul format sûr.