Сравнение дат в базе данных android sqlite - PullRequest
0 голосов
/ 19 июня 2020

Я сравниваю две даты в android базе данных sqlite. Я сохранил даты в формате

YYYY-MM-DD
Cursor cursor=db.rawQuery("SELECT * FROM "+tableName+" WHERE SALESDATE BETWEEN '2020-1-01' AND '2020-2-01';",null);

Это дает результат с датами 10, 11 и 12 месяца вместе с датами между вышеуказанные даты. Я хотел бы знать, является ли это ошибкой или в моем коде есть ошибка.

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

Вы должны сохранить дату как длинное значение в базе данных. Простой new Date (). GetTime () дает вам это значение, а new Date (длинное значение) возвращает его. Таким образом, вы можете упростить такие запросы.

Но я могу предложить:

  • Экспорт таблицы в CSV,
  • Измените значения даты на правильные SQLite TimeString и
  • повторно импортируйте CSV после удаления исходной таблицы.

Затем вы можете выполнить такой запрос:

SELECT * FROM tableName WHERE SALESDATE BETWEEN '2020-01-01 00:00:00' AND '2020-02-01 23:59:59'
0 голосов
/ 19 июня 2020

Проблема здесь в том, что ваши литералы даты имеют нестандартный (и, вероятно, неправильный) формат. Обратите внимание на то, что выполняется следующее неравенство:

'2020-10-01' > '2020-1-01' AND '2020-10-01' < '2020-2-01'

Это верно, потому что текст 10 лексикографически больше, чем просто 1, но также меньше 2. Чтобы избежать этой проблемы, используйте правильные литералы даты:

String sql = "SELECT * FROM " + tableName + " WHERE SALESDATE BETWEEN '2020-01-01' AND '2020-02-01';"
Cursor cursor = db.rawQuery(sql, null);

Обратите внимание, что SQLite фактически не имеет формального типа даты. Таким образом, очень важно всегда хранить ваши даты в SQLite, используя правильный формат ISO.

...