如何在SQLite中计算两列日期时间的差值?
解决SQLite中计算日期时间差值的问题
嘿,我来帮你排查下问题所在并给出解决方案!
首先,你的SQL语句有两个关键问题导致结果全为Null:
- 错误地给列名加了单引号:你写的
'data1.Enddate'是一个字符串字面量,不是引用表中的列。SQLite会尝试把这个字符串当成日期来解析,显然解析失败返回Null,两个Null相减自然还是Null。 - 直接对字符串做减法运算:即使你正确引用了列,
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
相关产品推荐
相关产品推荐

