2016-05-11 3 views
0

Привет я пытаюсь найти строки, где unixtimestamp 0:Найти DATETIME по unixtimestamp

WHERE datetimeField = datetime(0,'unixepoch','localtime') -> does not work 
WHERE datetimeField = datetime(0,'unixepoch','utc') -> does not work 
WHERE datetimeField = '1970-01-01T01:00:00' -> works 

любые идеи, почему нет даты и времени формата работы?

ответ

1

Потому что вы выполняете сравнение строк. [Sqlite's = = не является меткой времени, это сравнивает две вещи для равенства]. Предположительно, ваше datetimeField хранится в виде String '1970-01-01T01: 00: 00', функции которого могут быть использованы с моментальным использованием sqlite, но в конце концов это строка, потому что sqlite doesn't have an intrinsic datetime тип

Обратите внимание, что все три из этих являются разные строки, и, таким образом, не будет возвращать верно для проверки равенства:

sqlite> select datetime(0,'unixepoch','localtime'); 
1969-12-31 16:00:00 
sqlite> select datetime(0,'unixepoch','utc'); 
1970-01-01 08:00:00 
sqlite> select '1970-01-01T01:00:00'; 
1970-01-01T01:00:00 
sqlite> 

для уточнения, простое решение этой проблемы заключается в преобразовании всего в другой формат, который вы уверены, что он может быть преобразован к, и легко сравнивать. Поскольку вы уже подвели его, мне очень нравятся эпохальные секунды. Учитывая ваши даты в течение одного часа после полуночи, на первое января 1970 года:

sqlite> select strftime('%s', '1970-01-01T01:00:00'); 
3600 
sqlite> 

Так что с вашего кода:

{stuff} WHERE 0 = strftime('%s', datetimeField) 
+0

и что было бы решение этой проблемы? – wutzebaer

+0

Отредактировано мое сообщение, чтобы включить пример –

Смежные вопросы