SQLite strftime () возвращает null с целыми числами - PullRequest
0 голосов
/ 27 мая 2020

У меня есть дата с именем столбца «date» в моей таблице «productions», сохраненная как целое число в формате unix (пример: 1548263300000). И я хочу получить только год. Когда я делаю:

SELECT strftime('%Y ',date) as year
FROM productions 

, он возвращает мне null.

, когда я меняю тип на ТЕКСТ в своей таблице и сохраняю дату в строковом формате (пример 2020-05-01) , тот же sql возвращает мне «2020», что является правильным и тем, что я искал.

Почему strftime () не работает с целыми числами, поскольку документация SQLite говорит, что вы можете работать с TEXT, INTEGER и REAL для дат? Как использовать функции даты с целыми числами?

дополнительная информация:

в этом руководстве они также используют strftime с целыми числами, и, похоже, для них это работает, поэтому я понимаю из этого, что функции доступны независимо от того, какой тип вы используете (текст, int, real): ссылка

когда я использую:

SELECT strftime('%Y',DATETIME(ROUND(date/ 1000), 'unixepoch')) 
FROM productions;

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

1 Ответ

1 голос
/ 27 мая 2020

Вы можете использовать strftime(), но вам нужно добавить модификатор 'unixepoch':

strftime('%Y', date / 1000, 'unixepoch')

, чтобы ваш date / 1000 распознавался как количество секунд с момента 1970-01-01.

From Функции даты и времени :

Модификатор unixepoch (11) работает только в том случае, если он следует сразу за временной строкой в ​​D DDDDDDDDD формат. Этот модификатор заставляет D DDDDDDDDD интерпретироваться не как число юлианских дней, как обычно, а как Unix Time - количество секунд с 1970 года.

...