首页 > 解决方案 > 如何在 SQLite 中用 datetime 减去两列?

问题描述

我正在为工作学习 SQLite,我正在尝试从包含日期和时间的“开始日期”列中减去“结束日期”列。像这样的东西:

Startdate  3/15/18 16:00  3/28/18 17:00

Enddate    3/19/18 00:00  3/20/18 00:00

我的表的名称是 data1。我试过这个:

select *,
    strftime('%m/%d/%y %H:%M', 'data1.Enddate') -
        (strftime('%m/%d/%y %H:%M', 'data1.Startdate')) as TimeOff
from data1;

但这给了我所有的“空”值。

如果你能帮我解决这个问题,我将不胜感激。你这么多!

标签: sqlsqlite

解决方案


您得到的两个可能原因NULL(可能是因为静默错误):1)您的日期在创建时格式不正确。它们应该是yyyy-mm-dd HH:MM:SS格式。2) 在您的一个查询中没有结束分号。我在上面看到了它,但是如果您插入测试行的那个没有正确关闭,您可能不会

我的测试查询:

https://dbfiddle.uk/?rdbms=sqlite_3.8&fiddle=8b9a168291bbc08c74a895ce22ab41ac

设置

CREATE TABLE data1 (foo int, StartDate datetime, EndDate datetime) ;

INSERT INTO data1 (foo, StartDate, EndDate)
VALUES (1,'2018-03-15 16:00:00', '2018-03-28 17:00:00') 
  , (2,'2018-03-19 00:00:00', '2018-03-20 00:00:00') ;

查询

SELECT foo, StartDate, EndDate
   , julianday(EndDate)-julianday(StartDate) AS TimeOffInDays
   , CAST((julianday(EndDate) - julianday(StartDate))*24 AS real) AS TimeOffInHours
FROM data1 ;

这给了我们...

|  foo  |     StartDate       |       EndDate       |  TimeOffInDays  | TimeOffInHours  |
=========================================================================================  
|   1   | 2018-03-15 16:00:00 | 2018-03-28 17:00:00 | 13.041666666977 | 313.00000000745 |
|   2   | 2018-03-19 00:00:00 | 2018-03-20 00:00:00 |        1        |       24        |

推荐阅读