如何计算两个datetime字段之间的精确小时数?
解决方案
你之前用trunc的写法会将日期截断到当天零点,丢失了时分秒部分的精度,所以只能得到按天换算的整数小时。实际上两个datetime字段做差得到的结果本质是相差的天数(包含小数位的精确值),直接乘以24即可得到包含时分秒精度的总小时数。
不同数据库实现示例
Oracle 数据库
你原有的第一种写法稍作修改即可:
SELECT date1, date2, (date1 - date2) * 24 AS diff_hours FROM table;
说明:如果date1晚于date2返回正数,反之返回负数;如果需要取整,可按需嵌套TRUNC(向下取整)、ROUND(四舍五入)、CEIL(向上取整)函数。
MySQL 数据库
可以用TIMESTAMPDIFF函数实现,需要精确小数的话用秒差换算:
-- 整小时精度,舍去小数部分 SELECT date1, date2, TIMESTAMPDIFF(HOUR, date2, date1) AS diff_hours FROM table; -- 精确到小数的小时精度 SELECT date1, date2, TIMESTAMPDIFF(SECOND, date2, date1)/3600 AS diff_hours FROM table;
PostgreSQL 数据库
用EXTRACT提取时间差的秒数换算即可:
SELECT date1, date2, EXTRACT(EPOCH FROM (date1 - date2))/3600 AS diff_hours FROM table;
内容的提问来源于stack exchange,提问作者Prashanth Chitrambalam
相关产品推荐
相关产品推荐

