2016-08-29 9 views
2

Я пытался, но безуспешно, чтобы подсчитать, сколько значений были созданы в определенный день недели:SQLite STRFTIME() будний

SELECT count(*) as count FROM packets WHERE strftime("%w", timeIn) = '1'; 

У меня есть эти значения в timeIn

1472434822.60033 
1472434829.12632 
1472434962.34593 

I не знаю, что я делаю неправильно здесь.

Кроме того, если я использую это:

SELECT count(*) as count FROM packets WHERE strftime("%w", timeIn) = '6'; 

Я получаю

2 

, который не имеет никакого смысла. Заранее спасибо.

ответ

1

Вы, кажется, сохраняете дату как количество секунд с 1970 года (эпоха Unix) - общее представление. Временные строки, принятые SQLite date functions (см времени Строки раздел) по умолчанию для интерпретации числовых строк время как день числа Julian:

Аналогично, формат 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' 

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

+0

спасибо. Я попытался, но я не получаю никаких возвратов: 'SELECT count (*) как count FROM пакетов WHERE strftime ("% w ", timeIn, 'unixepoch') = 1;' должно ли лучше изменить формат формы вместо БД? – Joe

+0

Вы можете поэкспериментировать с некоторыми операторами SELECT, чтобы убедиться, что конверсии - это то, что вы ожидаете. Например, используя первое значение из вашего вопроса: 'SELECT strftime ('% w', 1472434822.60033, 'unixepoch') AS w, date (1472434822.60033, 'unixepoch') AS d' возвращает' 1' и '2016-08- 29'. – cartant

+0

еще раз спасибо за ваш добрый ответ. Я получаю '1' и' 2016-08-29' соответственно. Как ни странно, 'SELECT count (*) как count FROM пакетов WHERE strftime ("% w ", timeIn, 'unixepoch') = '0'' возвращает' 3'. В понедельник должно быть одно? – Joe