PHP与MSSQL转换Double格式时间问题咨询
关于Excel风格Double时间格式的转换问题
嘿,这个问题我刚好处理过!你遇到的这个Double值确实是Excel的时间格式——Excel把完整的一天(24小时)作为数值1,所以0.5就是中午12点,0.25是早上6点,和你给出的示例完全对应:
- 0.291666666666667 × 24小时 = 7小时 → 07:00:00
- 0.229166666666667 ×24=5.5小时 → 05:30:00
- 0.320833333333333 ×24=7.7小时=7小时42分钟 → 07:42:00
当然可以在MSSQL服务器中完成转换!我给你两种常用的高效方法:
方法1:利用MSSQL内置的日期类型转换
MSSQL的DATETIME类型支持直接把这种数值转换成日期(默认以1900-01-01为基准日),我们只需要提取时间部分就行,代码非常简洁:
-- 示例转换0.291666666666667 SELECT CONVERT(VARCHAR(8), CAST(0.291666666666667 AS DATETIME), 108) AS ConvertedTime;
这里的108是MSSQL的格式代码,专门用来提取HH:mi:ss格式的时间。
方法2:手动计算时分秒(更灵活可控)
如果需要自定义格式或者更清晰的计算逻辑,可以手动拆分小时、分钟、秒:
DECLARE @ExcelTime FLOAT = 0.229166666666667; SELECT -- 计算小时:数值×24后取整 RIGHT('0' + CAST(FLOOR(@ExcelTime * 24) AS VARCHAR), 2) + ':' + -- 计算分钟:剩下的小数部分×60后取整 RIGHT('0' + CAST(FLOOR((@ExcelTime * 24 * 60) % 60) AS VARCHAR), 2) + ':' + -- 计算秒:剩下的小数部分×60后取整 RIGHT('0' + CAST(FLOOR((@ExcelTime * 24 * 60 * 60) % 60) AS VARCHAR), 2) AS ConvertedTime;
另外提一句,如果之后PHP里也需要转换,其实也很简单:
$excelTime = 0.320833333333333; $totalSeconds = $excelTime * 86400; // 一天总共有86400秒 echo gmdate('H:i:s', $totalSeconds); // 输出07:42:00
不过既然你问的是MSSQL端处理,上面的SQL方法完全够用,而且在数据库层转换还能减轻应用端的计算负担哦。
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

