You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中如何将Datetime日期差值转换为十进制数

将Datetime日期差值转换为十进制数的方法

要把两个Datetime类型的日期差值转换成十进制数(比如示例中25小时对应≈1.0417天),核心是保留时分秒的时间贡献,再将总时间差换算为以天为单位的小数。避免像你之前那样只取日期部分相减——这种方法会丢失时分秒的信息,只能得到整数天数。

以下是不同主流SQL数据库的实现方法:

SQL Server 实现

  1. 直接相减法: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...

  1. 秒数换算:用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 实现

  1. 基于秒数换算:用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;
  1. 直接按天换算:将时间差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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 07:21:24