Оператор SQL не возвращает значение между двумя датами

Я пытаюсь выбрать конкретную дату между двумя датами. Форма, которую он хранит в БД, - M/d/yyyy. То, что я пытаюсь сделать, это передать две даты, и я хочу выбрать все данные столбца между этими двумя датами. Я знаю, что в БД есть данные, но для некоторых дат они ничего не приносят. Для некоторых дат они приносят данные, а для некоторых дат приносят данные.

Пример:

Когда я выбираю 10.07.2011 в качестве первой даты и в качестве второй даты 16.07.2011, это приносит данные. Но когда я выбираю 09.07.2011 в качестве первой даты и вторую дату 16.07.2011, это ничего не приносит.

Вот мой запрос:

Cursor cursor = db.query(CONTACT_DATA, new String[] { "duration" },
                "date >= ? AND date <= ?",
                new String[] { firstDate, secondDate }, null, null, null);

Если кто поможет с этим вопросом. Спасибо!


person rogcg    schedule 18.07.2011    source источник
comment
Посмотрите, поможет ли это: stackoverflow.com/questions /3838527/   -  person nickfox    schedule 18.07.2011
comment
вау, я пытаюсь опубликовать ответ, и он публикуется как комментарий. Я сделал это 3 раза.   -  person nickfox    schedule 18.07.2011


Ответы (2)


SQLite не имеет собственного типа даты; он сравнивает ваши даты как строки. Вот почему, когда даты относятся к одному месяцу и году и имеют одинаковое количество цифр в дне, запрос работает, но это просто удача.

Обычно пользователи SQLite форматируют свои строки даты, используя формат ISO-8601 (ГГГГ-ММ-ДД), который правильно сортирует строки.

В SQLite есть функции дат — если ваши даты правильно сформированы, вы можете использовать эти , а также ltrim и rtrim для преобразования дат в формат, пригодный для использования в запросах.

person Doug Currie    schedule 18.07.2011
comment
Таким образом, правильная форма, которую я должен использовать для запроса между двумя датами, будет следующей: ГГГГ-ММ-ДД? Спасибо. - person rogcg; 18.07.2011
comment
Да, если это также формат данных в столбце, с которым вы сравниваете. - person Doug Currie; 18.07.2011

Я буду хранить даты в миллисекундах (формат эпохи), чтобы их было легче сравнивать. И при печати даты я ее конвертирую.

person rogcg    schedule 02.08.2011