首页 新闻 会员 周边 捐助

sql server时间戳转为时间格式出现误差

0
悬赏园豆:5 [已解决问题] 解决于 2022-08-04 09:32

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呢?

有熟悉这方面的专家吗?希望能解释答疑下,谢谢了!

Shapley的主页 Shapley | 菜鸟二级 | 园豆:255
提问于:2022-08-03 14:40
< >
分享
最佳答案
0

C# 是 698

var dt = DateTimeOffset.FromUnixTimeMilliseconds(1656923140698).ToString("yyyy-MM-dd HH:mm:ss.fff");
Console.WriteLine(dt);
收获园豆:5
dudu | 高人七级 |园豆:30255 | 2022-08-03 15:07

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

dudu | 园豆:30255 (高人七级) | 2022-08-03 15:57

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
dudu | 园豆:30255 (高人七级) | 2022-08-03 16:04
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册