Как вычесть два столбца с датой и временем в SQLite? - PullRequest
0 голосов
/ 01 мая 2018

Я изучаю 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;

Но это дает мне все «нулевые» значения.

Если бы вы могли помочь мне с этим, я был бы очень признателен. Это вы так много!

1 Ответ

0 голосов
/ 01 мая 2018

Две возможные причины, по которым вы получили 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        |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...