SQL Server中INT类型非Epoch时间值转日期时间的计算逻辑咨询
SQL Server INT值转应用显示日期/时间的计算方式
时间部分(INT值4477877 → 12:26)
这个INT值的单位是1/100秒,转换逻辑如下:
- 将INT值除以100,得到总秒数:
4477877 / 100 = 44778.77秒 - 拆分总秒数为时分秒:
- 小时:取
44778.77 ÷ 3600的整数部分,即12小时 - 剩余秒数:
44778.77 - 12×3600 = 1578.77秒 - 分钟:取
1578.77 ÷ 60的整数部分,即26分钟 - 最终得到应用显示的
12:26
- 小时:取
用SQL Server代码验证的话,可以用:
DECLARE @timeInt INT = 4477877; SELECT CONVERT(VARCHAR(5), DATEADD(ms, @timeInt * 10, '00:00:00'), 108) AS ConvertedTime;
运行后会直接输出12:26,和应用显示一致。
日期部分(INT值77337 → 9/24/2012)
仅靠单个示例无法确定通用转换规则,但可以推导可能的逻辑方向:
假设这个INT值是自某个自定义起点日期以来的天数,反向计算起点日期的SQL语句为:
SELECT DATEADD(day, -77337, '2012-09-24') AS StartDate;
运行结果为1801-03-18,这个起点并非通用系统基准(比如Unix时间戳的1970-01-01、SQL Server默认的1900-01-01),所以大概率是应用自定义的日期偏移。
如果有更多示例数据,可以通过对比多组INT值和对应日期,验证是否存在固定天数偏移:比如取另一组INT值X和对应日期Y,计算DATEDIFF(day, Y, '2012-09-24')是否等于77337 - X,以此确认转换规则。
内容的提问来源于stack exchange,提问作者riccoding
相关产品推荐
相关产品推荐

