如何在PostgreSQL中实现类似Excel的日期小数差值计算?
让PostgreSQL日期差计算结果与Excel一致的方法
PostgreSQL中to_date()函数返回的是DATE类型,仅包含年月日信息,两个DATE类型相减得到的是整数天数;而Excel的日期计算默认包含时间维度(未指定时间时默认取当天00:00:00),当计算涉及时间占比时会返回带小数的结果(小数部分代表一天的占比,比如0.8635约等于20.72小时)。
要让PostgreSQL输出和Excel一致的带小数的天数结果,需要按以下方式调整查询:
- 将日期转换为包含时间的TIMESTAMP类型,可以用
to_timestamp()函数直接转换,或者给日期字符串追加时间部分。 - 计算两个TIMESTAMP的差值得到时间间隔,再将间隔转换为以天为单位的数值(包含小数)。
示例查询
替换原查询为:
SELECT EXTRACT(EPOCH FROM (to_timestamp('10042025','mmddyyyy') - to_timestamp('1977-09-27','yyyy-mm-dd'))) / 86400;
如果Excel中实际的结束时间包含具体时分秒(比如2025-10-04 20:43:36,对应0.8635天),可以直接指定时间来精确匹配:
SELECT EXTRACT(EPOCH FROM (timestamp '2025-10-04 20:43:36' - timestamp '1977-09-27 00:00:00')) / 86400;
逻辑说明
EXTRACT(EPOCH FROM interval):将时间间隔转换为总秒数- 除以86400(24小时×60分钟×60秒):把秒数转换为以天为单位的数值,小数部分对应一天中的时间占比,与Excel的计算逻辑完全对齐。
内容的提问来源于stack exchange,提问作者user1463065
相关产品推荐
相关产品推荐

