SQL Server中如何将数值类型的时间戳转换为datetime类型
SQL Server 13位毫秒级Unix时间戳转datetime方案
你提到的1628864262422属于毫秒级Unix时间戳,代表从UTC基准时间1970-01-01 00:00:00到目标时间经过的总毫秒数,可按照以下方案转换:
全版本兼容转换方案
所有SQL Server版本都可以用拆分秒+毫秒的方式实现,避免数值溢出:
SELECT DATEADD( ms, CAST(1628864262422 AS BIGINT) % 1000, -- 取余数得到不足1秒的毫秒部分 DATEADD( s, CAST(1628864262422 AS BIGINT) / 1000, -- 取整得到总秒数 '1970-01-01 00:00:00' ) ) AS 转换后时间
如果需要转换为本地时区时间,可补充时区偏移处理:
SELECT SWITCHOFFSET( DATEADD(ms, CAST(1628864262422 AS BIGINT) % 1000, DATEADD(s, CAST(1628864262422 AS BIGINT) / 1000, '1970-01-01 00:00:00')), DATEPART(TZOFFSET, SYSDATETIMEOFFSET()) ) AS 本地时区时间
SQL Server 2016及以上简化方案
2016版本新增支持大整数偏移的DATEADD_BIG函数,可直接计算毫秒偏移:
SELECT DATEADD_BIG(ms, 1628864262422, '1970-01-01 00:00:00') AS 转换后时间
注意事项
- 如果时间戳存储在BIGINT类型的字段中,可省略显式
CAST步骤直接引用字段 - 转换结果默认是UTC时间,可根据业务需求自行调整时区偏移
- 转换后精度和SQL Server原生datetime类型一致,为3.33毫秒,无业务级误差
内容的提问来源于stack exchange,提问作者Nam Nguyen
相关产品推荐
相关产品推荐

