Как отформатировать дату в sqlite?

Ссылка скопирована
1 ответ

В таблице в столбце 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, А доку почитать не пробовали? Первый аргумент задает формат вывода даты, то есть дата в ячейке должна быть в исо формате, тогда на выходе будет заданный шаблоном вид.
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Дмитрий К. Ответ

Для форматирования даты в SQLite можно использовать функцию strftime(). Эта функция принимает два аргумента: формат даты и сама дата.

Вот пример использования функции strftime() для форматирования даты в SQLite:

SELECT strftime('%Y-%m-%d %H:%M:%S', 'now');

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(). Надеюсь, это поможет вам решить вашу проблему!

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно