如何在SQLite中使用datetime减去两列?

时间:2018-05-01 13:22:24

标签: sql sqlite

我正在学习SQLite的工作,我试图从'Startdate'列中删除'Enddate'列,其中包含日期和时间。像这样的东西:

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;

但是这给了我所有'Null'的价值。

如果你可以帮助我,我会非常感激。你真是太棒了!

1 个答案:

答案 0 :(得分:0)

您获得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        |