Essayez ça :
DECLARE @t DATETIME='06:51:00';
SELECT CAST(@t AS FLOAT)
Le résultat
0,285416666666667
Votre valeur ridicule semble être la partie après la virgule, c'est-à-dire la fraction de jour. Vous pourriez dire Après 28,54% d'une journée complète, il est 06h51.
EDIT
Grâce à Martin Smith, je dois corriger mon "DATETIME is a FLOAT".
A DATETIME
est stocké sous la forme de deux entiers de 4 octets combinés à une structure de 8 octets en réalité. Le premier int est pris comme un compte de jour, le second est un compteur de ticks
depuis minuit. Vous pouvez lire este .
Une autre représentation commune (je pense que c'est valable pour VB(A), Access et les systèmes apparentés) est un datetime
comme float
. La partie entière est le compte du jour et la fraction est la fraction du jour. Le serveur SQL convertit cela implicitement :
SELECT CAST(0.5 AS DATETIME)
Le résultat est 1900-01-01 12:00:00.000
Pour obtenir votre temps (le formule magique ) vous devez faire ceci :
SELECT CAST(0.285571 AS DATETIME)
UPDATE la solution magique
DECLARE @t INT=285571;
SELECT CAST(CAST('0.' + CAST(@t AS VARCHAR(100)) AS FLOAT) AS DATETIME)
Vous pourriez vouloir ajouter une autre CAST( ... AS TIME)
(selon la version de votre serveur SQL)
Et pour les amateurs de calculs purs
SELECT CAST(CAST(CAST(@t AS FLOAT)/CAST(POWER(10,CAST(LOG10(@t) AS INT)+1) AS FLOAT) AS DATETIME) AS TIME)
UPDATE
Dans votre cas, il serait peut-être préférable de combiner votre compteur journalier et votre valeur temporelle avec une fonction .
au niveau de la corde, lancez-la sur float
et le résultat à datetime
.