Как отформатировать дату в sqlite?
В таблице в столбце date записана дата в формате DD.MM.YYYY например (26.12.2022).
Но в sqlite дата записывается в формате YYYY-MM-DD.
Мне нужно получить сроки на неделю вперед от сегодняшней даты
и я пытался делать так:
SELECT date, text FROM data WHERE date BETWEEN '26.12.2022' AND '02.01.2023' ORDER BY date; |
SELECT date, text FROM data WHERE date BETWEEN '26.12.2022' AND '02.01.2023' ORDER BY date;
последний месяц эта команда работала нормально
но сейчас год второй даты изменился и я выяснил что sqlite у даты сравнивает только месяц и день и работает команда
WHERE date BETWEEN '26.12.2022' AND '39.35.2000' --выводит строки с датами в этом году |
WHERE date BETWEEN '26.12.2022' AND '39.35.2000' --выводит строки с датами в этом году
показывает даты в этом году хотя во второй дате числа поставлены несуществующие
sqlite обращает внимание только на месяц и день, но не на год
так же я пытался делать и так:
SELECT strftime('%d.%m.%Y', '26.12.2022');
я менял знаки разделяющие %
"%d %m %Y", "%d-%m-%Y"
и менял местами d, m, Y на Y, m, d
но каждый раз получал Null
sqlite почему то не правильно распознавал флаги %d %m %Y как бы я их не ставил он выдаёт Null
P.S. я знаю про DATE('now') и DATE('now', '+7 day')
Дополнительно:
Но в sqlite дата записывается в формате YYYY-MM-DD.
Это не в sqlite, это исо стандарт записи даты.
В таблице в столбце date записана дата в формате DD.MM.YYYYВ таблице в столбце date записана дата в формате DD.MM.YYYY
Ну, то есть вы знали что есть формат конкретный формат, но все равно сделали через ж, в угоду собственному чувству прекрасного?
Мне нужно получить сроки на неделю вперед от сегодняшней даты
И вот мы приходим к самому интересному: почему запись в стандартном виде будет работать нормально, а в вашей записи все... очень плохо? Дело в том, что в большинстве бд дата сравнивается как строка, именно по этому запись идет как год.месяц.день, так как при сравнении 2 строк в таком формате любое сравнение 2 дат будет корректно сравнивать 2 строки с правильным результатом. Тем более что в sqlite нет типа данных date, но с правильным форматом содержимого он особо не нужен. Меняйте формат хранения и будет вам щастие.
- нашёл решение для существующей базы:
SELECT date, text FROM date WHERE substr(date, 7, 4) || '-' || substr(date, 4, 2) || '-' || substr(date, 1, 2) BETWEEN DATE('now') AND DATE('now', '+7 day') ORDER BY date;
SELECT date, text FROM date WHERE substr(date, 7, 4) || '-' || substr(date, 4, 2) || '-' || substr(date, 1, 2) BETWEEN DATE('now') AND DATE('now', '+7 day') ORDER BY date;
но всё равно пойду менять форматы даты
- Хорошо, почему тогда флаги в
strftime('%d.%m.%Y', '26.12.2022')
не работали? - EgorKh1, А доку почитать не пробовали? Первый аргумент задает формат вывода даты, то есть дата в ячейке должна быть в исо формате, тогда на выходе будет заданный шаблоном вид.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для форматирования даты в SQLite можно использовать функцию strftime(). Эта функция принимает два аргумента: формат даты и сама дата.
Вот пример использования функции strftime() для форматирования даты в SQLite:
SELECT strftime('%Y-%m-%d %H:%M:%S', 'now');
В этом примере мы используем формат '%Y-%m-%d %H:%M:%S', который означает год, месяц, день, час, минуту и секунду. Функция 'now' возвращает текущую дату и время.
Вы также можете использовать другие форматы даты в функции strftime(), например:
- %Y: год (четыре цифры)
- %m: месяц (две цифры)
- %d: день (две цифры)
- %H: час (две цифры, 24-часовой формат)
- %M: минута (две цифры)
- %S: секунда (две цифры)
Таким образом, вы можете легко форматировать дату в SQLite, используя функцию strftime(). Надеюсь, это поможет вам решить вашу проблему!