SQL выбор между датами
Я запускаю sqlite для выбора данных между двумя диапазонами для отчета о продажах. Для выбора данных между двумя датами я использую следующую инструкцию:
SELECT * FROM test WHERE date BETWEEN "11/1/2011" AND "11/8/2011";
этот оператор захватывает все даты, даже те, которые находятся вне критериев. Формат даты, который вы видите, введен в том же формате, что и я возвращаюсь. Я не уверен, что случилось, но ценю любую помощь, которую я могу найти. Спасибо!
6 ответов:
SQLLite требует даты, чтобы быть в . Поскольку данные в вашей базе данных и строка в вашем запросе не в этом формате, он, вероятно, рассматривает ваши "даты" как строки.
измените свои данные на эти форматы, чтобы использовать форматы SQLite datetime.
YYYY-MM-DD YYYY-MM-DD HH:MM YYYY-MM-DD HH:MM:SS YYYY-MM-DD HH:MM:SS.SSS YYYY-MM-DDTHH:MM YYYY-MM-DDTHH:MM:SS YYYY-MM-DDTHH:MM:SS.SSS HH:MM HH:MM:SS HH:MM:SS.SSS now DDDDDDDDDD SELECT * FROM test WHERE date BETWEEN '2011-01-11' AND '2011-08-11'
еще один способ выбора между датами в SQLite-использовать мощный strftime функция:
SELECT * FROM test WHERE strftime('%Y-%m-%d', date) BETWEEN "11-01-2011" AND "11-08-2011"они эквивалентны в соответствии с https://sqlite.org/lang_datefunc.html:
date(...) strftime('%Y-%m-%d', ...)а если вы хотите больше выбора, у вас есть.
или вы можете привести свою строку в формат даты с помощью дата. Даже дата хранится в виде текста в БД. Вот так (самый работоспособный вариант):
SELECT * FROM test WHERE date(date) BETWEEN date('2011-01-11') AND date('2011-8-11')
SELECT * FROM TableName WHERE julianday(substr(date,7)||'-'||substr(date,4,2)||'-'||substr(date,1,2)) BETWEEN julianday('2011-01-11') AND julianday('2011-08-11')обратите внимание, что я использую формат :
dd/mm/yyyyЕсли вы используете d/m/yyyy, измените в
substr()надеюсь, что это поможет вам.
отдельное спасибо Джефф и vapcguy ваша интерактивность действительно обнадеживает.
вот более сложный оператор, который полезен, когда длина между ' / ' неизвестна::
SELECT * FROM tableName WHERE julianday( substr(substr(date, instr(date, '/')+1), instr(substr(date, instr(date, '/')+1), '/')+1) ||'-'|| case when length( substr(date, instr(date, '/')+1, instr(substr(date, instr(date, '/')+1),'/')-1) )=2 then substr(date, instr(date, '/')+1, instr(substr(date, instr(date, '/')+1), '/')-1) else '0'||substr(date, instr(date, '/')+1, instr(substr(date, instr(date, '/')+1), '/')-1) end ||'-'|| case when length(substr(date,1, instr(date, '/')-1 )) =2 then substr(date,1, instr(date, '/')-1 ) else '0'||substr(date,1, instr(date, '/')-1 ) end ) BETWEEN julianday('2015-03-14') AND julianday('2015-03-16')
Comments