1.本来想把mongo的时间戳转为sqlserver的时间类型,但在转的过程中发现毫秒的地方会出现误差,比如mongo中的时间戳为:1656923140698,对应的mongodb时间为:2022-07-04T08:25:40.698Z,但是sqlserver的时间却为:2022-07-04 16:25:40.697,即少了一毫秒。
测试语句:
DECLARE @UNIXTIME BIGINT
SET @UNIXTIME = 1656923140698
SELECT DATEADD (MS ,@UNIXTIME % 60000 ,DATEADD(MI,@UNIXTIME / 60000,'1970-01-01 08:00:00.000'))
2.进而用dateadd方法测试:
select dateadd(ms,698,'2022-07-04 16:25:40.000')
而结果为:
2022-07-04 16:25:40.697,为啥不是2022-07-04 16:25:40.698呢?
有熟悉这方面的专家吗?希望能解释答疑下,谢谢了!
C# 是 698
var dt = DateTimeOffset.FromUnixTimeMilliseconds(1656923140698).ToString("yyyy-MM-dd HH:mm:ss.fff");
Console.WriteLine(dt);
SQL Server 是 DATEADD 函数的问题
SELECT DATEADD(MS, 1, '1970-01-01 08:00:00.000')
的输出是 1970-01-01 08:00:00.000
SELECT DATEADD(MS, 2, '1970-01-01 08:00:00.000')
的输出是 1970-01-01 08:00:00.003
是 datetime
类型的问题,改用 datetime2
可以解决
DECLARE @UNIXTIME BIGINT
SET @UNIXTIME = 1656923140698
DECLARE @Date datetime2 = '1970-01-01 08:00:00.000'
SELECT DATEADD (MS, @UNIXTIME % 60000, DATEADD(MI, CEILING(@UNIXTIME / 60000), @Date))
输出是
2022-07-04 16:25:40.6980000