2016-06-24 3 views
0

Я пытаюсь запросить то, что произошло между сегодняшним днем ​​и вчера. К примеру, на 17 июня 2016 года она будет выглядеть следующим образом:Запрос между датами в SQLITE

SELECT * FROM Inspection_Log WHERE date_time BETWEEN '2016-6-16' AND '2016-6-17' 

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

Но вот мой текущий вопрос:

Этот запрос работает:

>SELECT COUNT(*) FROM Inspection_Log WHERE date_time BETWEEN '2016-6-16' AND '2016-6-17' 
535 

Но когда я использую date('yada', '+1 day')

>SELECT COUNT(*) FROM Inspection_LOG WHERE date_time BETWEEN '2016-6-16' AND DATE('2016-6-16','+1 day') 
0 

Так что я стараюсь с strftime

>SELECT COUNT(*) FROM Inspection_LOG WHERE date_time BETWEEN '2016-6-16' AND strftime('%Y-%M-%D','2016-6-16','+1 day') 
0 

Поэтому я стараюсь с datetime

>SELECT COUNT(*) FROM Inspection_LOG WHERE date_time BETWEEN '2016-6-16' AND datetime('2016-6-16','+1 day') 
0 

Порывшись в это вот то, что я вижу ВЫБЕРИТЕ времени ('сейчас') '2016-06-24' выбрать дату ('теперь') «2016-06 -24' SELECT, дата ('теперь', '- 1 день') '2016-06-23' SELECT, дата ('2016-6-24', '- 1 день') NONE

Что я делаю неправильно?

ответ

0

Хорошо, поэтому я был совершенно и совершенно неправ.

Моя схема выглядит следующим образом:

CREATE TABLE InspectionLog(
    date_time DATE, 
    station_name TEXT, 
    inspection TEXT, 
    barcode_part_number TEXT, 
    bus_part_number TEXT, 
    barcode_serial_number TEXT, 
    bus_serial_number TEXT, 
    rework_operation TEXT, 
    status TEXT, 
    ng_description TEXT 
) 

DATE не является допустимым типом данных. Это на самом деле обертка высокого уровня вокруг INTEGER и TEXT в зависимости от данных, помещенных в нее. Sqlite3 по умолчанию - TEXT.

Что это означает, когда я выполнить вставки/обновления, который делает что-то похожее на:

date_time = '2016-6-16' 

Это действует, как date_time действительно TEXT не DATE. И когда я заготовлю поиск, который использует тип данных DATE, он пропустит любую строку, которая не является DATE.

The long версия есть. Я вставил ~ 250 МБ, неправильно отформатированный в эту таблицу. После исправления моих тестов и функций, так что у моих вставок всегда есть цифры 2 дня/месяца, большинство запросов времени OP работают правильно.

1

Вам нужно изменить: И STRFTIME ('% Y- % M-% D', '2016- -16', '+ 1 день') для И STRFTIME ('% Y- % m-% d ',' 2016- -16 ',' + 1 день ').

1 - Для первого параметра «ГГГГ-ММ-ДД» следует использовать «% Y-% m-% d». Строка формата поддерживает наиболее распространенные подстановки, найденные в функции strftime() из стандартной библиотеки C, и две новые подстановки,% f и% J. The complete list link

2 - Строка времени должна соответствовать следующему формату: ГГГГ-ММ-ДД, тогда вам нужно использовать '2016-06-16'.

Существует вопрос и ответ: SQL Select between dates

+0

Я вставил данные неправильно изначально, так что я запрашивая 'Text' поля в качестве' date' полей, которые не дали никаких результатов. Даже этот столбец был объявлен как «ДАТА» ... это действительно «ТЕКСТ», поскольку речь идет о sqlite3. – Valarauca

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