以下是可以計算bigint到datetime的2個計算結果。
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);
結果:
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
注意,首先是精確到秒。
毫秒數隨每次運行而變化。
雖然第二隻是精確到分鐘。
有些篡改這些日期時間可以舍入到第二個。
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);
對於給定的輸入'635307578922100000' – StackUser
您的預期結果是什麼?看起來像這些是蜱蟲。 [將.NET Ticks轉換爲SQL Server DateTime]的可能的重複(http://stackoverflow.com/questions/2313236/convert-net-ticks-to-sql-server-datetime) - 使用這裏的答案給出'2016-07 -26 09:12:00.000' – Bridge
您需要將此值轉換爲01.01.1900 00:00:00以來的小時數,這是適合'int'的最大日期部分精度。然後將ms添加到左側。 – Serg