JulianDay () и Strftime () возвращают null при вычислении разницы между двумя датами

У меня проблема с получением разницы между двумя столбцами даты из таблицы в базе данных SQLite. Когда я выполняю запрос с помощью CocoaMySQL MesaSQLite 3.0.9, в результате я получаю «NULL». У меня есть записи со значениями для этих столбцов. Мой запрос

SELECT cast ((strftime ('% s', t.timestamp2) -strftime ('% s', t.timestamp1)) AS real) / 60/60 AS истекло FROM timestamp AS t; SELECT (STRFTIME ('% s', timestamp1) - STRFTIME ('% s', timestamp2)) / -3600 из временных меток, где objid = 3939

Результат: ноль

выберите timestamp1, timestamp2 из временных меток, где objid = 3939.

Результат: 29.01.2014 02:55:00 29.01.2014 03:00:00 (означает, что у меня есть данные в таблице временных меток)

ВЫБРАТЬ julianday ('сейчас') - julianday ('1776-07-04');

Результат: 87287.5314

ВЫБРАТЬ julianday (timestamp1) - julianday (timestamp2) из ​​временных меток, где objid = 3939

Результат: значение NULL

«timestamp1» и «timestamp2» - это столбцы в таблице «timestamp», в которых есть записи со значениями.

Пожалуйста, дайте решение, чтобы исправить эту проблему как можно скорее. Я не могу добавлять снимки экрана.


person Sreeni    schedule 29.06.2015    source источник


Ответы (1)


Метки даты, такие как 2014-01-29 02:55:00 AM, имеют формат, отличный от , понятного SQLite. Поддерживается только 24-часовое время, вам необходимо удалить AM / PM.

Кроме того, если вы планируете выполнять математические вычисления в своих датах, подумайте о том, чтобы хранить их в первую очередь в формате, который делает вычисления простыми, быстрыми и надежными, например, в секундах unixepoch.

person laalto    schedule 29.06.2015
comment
Спасибо за ответ. Я сделал таким образом select timestamp1, timestamp2, cast ((strftime ('% s', trim (ts.timestamp2, 'AM / PM')) - strftime ('% s', trim (ts.timestamp1, 'AM / PM '))) AS real) / 60/60 из временных меток, где objid = 3939. Это сработало для меня. - person Sreeni; 30.06.2015