SQL中如何将Datetime日期差值转换为十进制数
将Datetime日期差值转换为十进制数的方法
要把两个Datetime类型的日期差值转换成十进制数(比如示例中25小时对应≈1.0417天),核心是保留时分秒的时间贡献,再将总时间差换算为以天为单位的小数。避免像你之前那样只取日期部分相减——这种方法会丢失时分秒的信息,只能得到整数天数。
以下是不同主流SQL数据库的实现方法:
SQL Server 实现
- 直接相减法:Datetime类型直接相减会返回带小数的天数(整数部分是天数,小数部分是时分秒占一天的比例)
SELECT CAST('2023-01-02 18:00:00' AS DATETIME) - CAST('2023-01-01 17:00:00' AS DATETIME) AS decimal_diff;
返回结果:1.041666...
- 秒数换算:用
DATEDIFF计算总秒数,再除以86400.0(注意用浮点数避免整数除法)
SELECT DATEDIFF(second, '2023-01-01 17:00:00', '2023-01-02 18:00:00') / 86400.0 AS decimal_diff;
MySQL 实现
用TIMESTAMPDIFF计算总秒数/小时数,再换算为天:
-- 按秒数换算 SELECT TIMESTAMPDIFF(SECOND, '2023-01-01 17:00:00', '2023-01-02 18:00:00') / 86400.0 AS decimal_diff; -- 按小时数换算 SELECT TIMESTAMPDIFF(HOUR, '2023-01-01 17:00:00', '2023-01-02 18:00:00') / 24.0 AS decimal_diff;
PostgreSQL 实现
- 基于秒数换算:用
EXTRACT(EPOCH FROM ...)获取时间差的总秒数,再除以86400.0
SELECT EXTRACT(EPOCH FROM ('2023-01-02 18:00:00'::timestamp - '2023-01-01 17:00:00'::timestamp)) / 86400.0 AS decimal_diff;
- 直接按天换算:将时间差interval除以1天的interval,得到十进制天数
SELECT ('2023-01-02 18:00:00'::timestamp - '2023-01-01 17:00:00'::timestamp) / '1 day'::interval AS decimal_diff;
内容的提问来源于stack exchange,提问作者Noname
相关产品推荐
相关产品推荐

