Voici 2 calculs qui peuvent calculer le bigint à une date/heure.
select
tick.value,
-- 10000000 * 24 * 60 * 60 = 864000000000
CAST((tick.value - 599266080000000000)/864000000000 AS datetime) as DateTimeCalc1,
DATEADD(MINUTE, ((tick.value - 599266080000000000)/600000000), '1900-01-01') as DateTimeCalc2,
from (values
(convert(bigint,635307578922100000)),
(convert(bigint,599266080000000000))
) tick(value);
Résultat:
value DateTimeCalc1 DateTimeCalc2
635307578922100000 2014-03-18 16:44:52.210 2014-03-18 16:44:00.000
599266080000000000 1900-01-01 00:00:00.000 1900-01-01 00:00:00.000
Notez que la première est à la seconde près.
Les millisecondes varient toutefois à chaque passage.
Alors que le second est seulement précis à la minute.
Avec un peu de falsification, ces dates peuvent être arrondies à la seconde.
select
tick.value,
CAST((tick.value - 599266080000000000)/864000000000 AS datetime) as DateTimeCalc1,
-- truncated
CAST(CONVERT(varchar, CAST((tick.value - 599266080000000000)/864000000000 AS datetime),20) AS datetime) as DateTimeCalc1B,
-- rounded
CAST(CAST(CAST((tick.value - 599266080000000000)/864000000000 AS datetime) as datetime2(0)) AS datetime) as DateTimeCalc1C,
-- only for dates between 1981-12-14 and 2118-01-19
DATEADD(SECOND, ((tick.value - 646602048000000000)/10000000), '2050-01-01') as DateTimeCalc2B
from (values
(630823257457000000),
(635307578922100000),
(646602048000000000),
(662380857456770000)
) tick(value);
Quel serait votre résultat attendu pour l'entrée '635307578922100000' – StackUser
Il semble que ce soient des coches. Copie possible de [Convertir .NET Ticks à SQL Server DateTime] (http://stackoverflow.com/questions/2313236/convert-net-ticks-to-sql-server-datetime) - en utilisant la réponse ici donne '2016-07 -26 09: 12: 00.000' – Bridge
Vous devez convertir cette valeur en nombre d'heures depuis 01.01.1900 00:00:00, c'est la précision maximale de la partie date qui correspond à 'int'. Puis ajoutez ms à gauche. – Serg