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 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'

Вы должны видеть результаты, более соответствующие вашим ожиданиям.