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

如何在SQLite中计算两列日期时间的差值?

解决SQLite中计算日期时间差值的问题

嘿,我来帮你排查下问题所在并给出解决方案!

首先,你的SQL语句有两个关键问题导致结果全为Null:

  1. 错误地给列名加了单引号:你写的'data1.Enddate'是一个字符串字面量,不是引用表中的列。SQLite会尝试把这个字符串当成日期来解析,显然解析失败返回Null,两个Null相减自然还是Null。
  2. 直接对字符串做减法运算:即使你正确引用了列,strftime返回的是格式化后的字符串,SQLite无法对字符串执行减法操作,这也会导致Null结果。

正确的解决方法

要计算两个日期时间的差值,我们需要先把它们转换成时间戳(从1970-01-01 00:00:00 UTC开始的秒数),然后再做减法,最后可以根据需求转换成小时、天数等单位。

步骤1:正确引用列并获取时间戳差值

首先修正列名的引用,然后用strftime('%s', 列名)获取时间戳:

SELECT *,
       strftime('%s', data1.Enddate) - strftime('%s', data1.Startdate) AS TotalSeconds
FROM data1;

这个语句会返回两个时间点之间的总秒数。

步骤2:转换成更易读的单位

如果需要得到小时或者天数,可以对秒数做进一步计算:

  • 转换成小时(保留小数):
SELECT *,
       (strftime('%s', data1.Enddate) - strftime('%s', data1.Startdate)) / 3600.0 AS TotalHours
FROM data1;
  • 转换成天数(保留小数):
SELECT *,
       (strftime('%s', data1.Enddate) - strftime('%s', data1.Startdate)) / 86400.0 AS TotalDays
FROM data1;

额外注意:如果日期是字符串类型

如果你的Startdate和Enddate存储的是字符串(而非SQLite的datetime类型),且格式是mm/dd/yy HH:MM,需要先用datetime函数转换为SQLite能识别的格式,再计算时间戳:

SELECT *,
       strftime('%s', datetime(data1.Enddate, '%m/%d/%y %H:%M')) - strftime('%s', datetime(data1.Startdate, '%m/%d/%y %H:%M')) AS TotalSeconds
FROM data1;

这样就能得到正确的时间差值啦!

内容的提问来源于stack exchange,提问作者Meghan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:02:13