Как вычесть два столбца с датой и временем в SQLite?

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

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

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

Ваш текущий формат даты %m/%d/%y сделает это очень трудным. Пожалуйста, подумайте о том, чтобы записывать даты в формате год-месяц-день. Как только вы это сделаете, вы можете легко использовать julianday, чтобы получить разницу между двумя временными метками.

Tim Biegeleisen 01.05.2018 15:38

Какая версия SQL? А что делает strftime()? Какой тип данных он возвращает? Можете ли вы просто сделать date1.Enddate - date1.Startdate, а затем применить форматирование к возвращаемому значению? Возвращают ли EndDate и StartDate значения до того, как вы попытаетесь их отформатировать?

Shawn 01.05.2018 15:42

SQLite поддерживает ограниченное количество форматов строки даты / времени, и ваши дата и время не соответствуют ни одному из них. Если вы хотите произвести какие-либо манипуляции с этими датами и временем в SQLite, вам нужно либо изменить способ их вставки, либо выполнить некоторые сложные манипуляции со строками.

glibdud 01.05.2018 16:52
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
3
3 396
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Две возможные причины, по которым вы получили 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        |

Другие вопросы по теме