SQLite strftime () будний день
Я безуспешно пытался подсчитать, сколько значений было создано в определенный день недели:
SELECT count(*) as count FROM packets WHERE strftime("%w", timeIn) = '1';
У меня есть эти значения в timeIn
1472434822.60033
1472434829.12632
1472434962.34593
Я не знаю, что я здесь делаю не так.
Кроме того, если я использую это:
SELECT count(*) as count FROM packets WHERE strftime("%w", timeIn) = '6';
Я получаю
2
Что не имеет никакого смысла. Заранее спасибо.
1 ответ:
Вы, по - видимому, сохраняете дату как число секунд с 1970 года (эпоха Unix) - общее представление. Строки времени, принятые функциями SQLite date (см. раздел Time Strings), по умолчанию интерпретируют числовые строки времени как числа Юлианских дней:
Аналогично, формат 12 показан с 10 значащими цифрами, но функции даты / времени действительно будут принимать столько или столько цифр, сколько необходимо для представления юлианского дня число.
Вы можете увидеть это со следующим
SELECT
:SELECT strftime('%Y-%m-%d', 1472428800.6) AS t
Результатом чего является:
4026-48-26
Чтобы ваше представление даты было интерпретировано как эпоха Unix, вам нужно включить
'unixepoch'
в вызовstrftime
:SELECT strftime('%Y-%m-%d', 1472428800.6, 'unixepoch') AS t
Который возвращает:
2016-08-29
Если вы измените свой
SELECT
на:SELECT count(*) as count FROM packets WHERE strftime("%w", timeIn, 'unixepoch') = '6'
Вы должны видеть результаты, более соответствующие вашим ожиданиям.