Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как сохранить и получить значение даты и времени в SQLite

Автор вопроса: CommunityОтветов: 3

Моя таблица содержит поле "Дата рождения", которое имеет тип данных как дату и время. Я хочу получить все записи, имеющие день рождения сегодня. Как я могу это получить?

sqlite

Ответы

Ответ 1 · рейтинг 7 · Nick Dandoulakis

Попробуйте этот запрос:

SELECT * FROM mytable
WHERE strftime('%m-%d', 'now') = strftime('%m-%d', birthday)

Ответ 2 · рейтинг 5 · Leon Matthews

Наличие специального типа даты и времени всегда казалось мне ненужным, целые числа быстрые, гибкие и занимают меньше места.

Для общих значений даты и времени используйте временные метки Unix Epoch. С ним легко работать, он чрезвычайно гибкий, а также не зависит от часового пояса (и даже календаря!) (Недавно я написал статью об их использовании, которую мне действительно нужно подключить... а>)

Тем не менее, если вас интересуют только даты в григорианском календаре, вы можете использовать большое целое число в следующем формате: ГГГГММДД, например, 19761203. Для вашего конкретного использования вы можете даже создать четырехзначное целое число, например ММДД, скажем, 1703. это должно привести к быстрому выбору!

Ответ 3 · рейтинг 4 · Liron Levi

SQLite имеет очень плохую поддержку хранения дат. Вы можете использовать метод, предложенный Nick D выше, но имейте в виду, что этот запрос приведет к полному сканированию таблицы, поскольку даты неправильно индексируются в SQLite (на самом деле SQLite вообще не поддерживает даты как встроенный тип).

Если вы действительно хотите сделать быстрый запрос, вам придется добавить отдельный (интегральный) столбец для хранения дня рождения (1-31) и прикрепить к нему индекс в базе данных.

Если вы хотите сравнивать только даты, вы можете добавить один столбец (INTEGER), в котором будет храниться значение даты в формате UTC (но этот трюк не позволит вам легко искать отдельные компоненты даты).

Удачи

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы