Задать вопрос
@HardX

Sqllite ерунда в ответе на запрос (дата/время)?

Вроде простейший запрос в БД
Select * from Base where DateTime between Date1 and Date2

Формат столбца DateTime - DATETIME
Формат записей в столбец 01-01-2001 00:00:00
Формат Date1 и Date2 01-01-2001 00:00:00

Проблема в том, что в ответ на запрос попадают лишние записи, которые вне искомого диапазона.

К примеру поиск между 26-10-2022 00:00:00 и 27-10-2022 23:59:59

Выдает с тем что нужно ещё и кучу записей с другими месяцами (26-09-2022 00:00:01 и т д.)

Как сформировать правильный запрос чтоб получить информацию именно от Date1 до Date2
  • Вопрос задан
  • 101 просмотр
Подписаться 1 Средний 3 комментария
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Инженер по тестированию
    5 месяцев
    Далее
  • Нетология
    Инженер по тестированию
    8 месяцев
    Далее
  • Thinknetica
    Профессиональная разработка на Ruby on Rails
    9 месяцев
    Далее
Решения вопроса 1
@HardX Автор вопроса
Sqlite3 не поддерживает формат DateTime, данные сохраняются в формате string, поэтому придется прописывать дополнительный фильтр через strptime по вернувшимся данным из запроса.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@deliro
Как минимум, даты не хранят в таком формате, потому что в таком формате они не сравниваются лексикографически. Правильный формат - "2022-10-28 01:19". От большего к меньшему. Год, месяц, день. Размерность обязательна, нельзя написать 2022-2-15 и сказать, что это 15е февраля, только 2022-02-15, иначе у тебя все даты февраля станут позже месяцев с двузначными числами: октябрь, ноябрь, декабрь ("10", "11", "12" меньше "2" лексикографически). Только так между двумя датами в виде строк можно поставить знак «больше» или «меньше». Ну или хранить как timestamp тоже вполне вариант, меньше места займёт, но менее человекочитаемо
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Нижний Новгород
от 50 000 до 90 000 ₽
ITK academy Казань
от 50 000 до 90 000 ₽