SQL SERVER如何转换毫秒级时间戳到时间

 更新时间:2026年06月10日 09:39:29   作者:QQ1295845504  
这篇文章主要介绍了SQL SERVER如何转换毫秒级时间戳到时间问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

物联网项目的时间大多时毫秒级的时间戳,在SQL SERVER中转换为时间时会出现“将 expression 转换为数据类型 int 时出现算术溢出错误

SELECT DATEADD(MILLISECOND, 1757304100073, '1970-01-01 00:00:00')

消息 8115,级别 16,状态 2,第 10 行
将 expression 转换为数据类型 int 时出现算术溢出错误。

原因分析

在 SQL Server 中出现这个错误是因为 DATEADD 函数的第二个参数(间隔数量)对于MILLISECOND 类型有范围限制,当数值过大时会超出 int 类型的最大值(2,147,483,647)。

时间戳 1757304100073 是一个毫秒级时间戳,远大于 int 类型的最大值,因此直接使用 MILLISECOND 参数会导致算术溢出。

解决办法:分两步转换

先处理秒,再处理毫秒。

先将毫秒级时间戳转换为秒级(除以 1000),再处理剩余的毫秒数:

DECLARE @timestamp BIGINT = 1757304100073;

-- 计算总秒数和剩余毫秒数
SELECT 
    DATEADD(MILLISECOND, @timestamp % 1000,  -- 剩余毫秒数
        DATEADD(SECOND, @timestamp / 1000, '1970-01-01 00:00:00')  -- 秒级时间戳转换
    )
    
--查询结果    
2025-09-08 04:01:40.073

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

最新评论