Моя таблица содержит поле «Дата рождения», которое имеет тип данных как дату и время. Я хочу получить все записи, имеющие день рождения сегодня. Как я могу это получить?
Как сохранить и получить значение даты и времени в SQLite
Ответы (3)
Попробуйте этот запрос:
SELECT * FROM mytable
WHERE strftime('%m-%d', 'now') = strftime('%m-%d', birthday)
TEXT? А может BLOB? Было бы полезно, если бы в документации было указано, что использовать для sqlite3_bind_xxxx. И мне было бы любопытно узнать, работают ли другие операторы, например >=, как положено. Также см. функция привязки SQLite в подготовленном операторе.
- person jww; 24.03.2019
Наличие специального типа даты и времени всегда казалось мне ненужным, целые числа быстрые, гибкие и занимают меньше места.
Для общих значений даты и времени используйте временные метки Unix Epoch. С ним легко работать, он чрезвычайно гибкий, а также не зависит от часового пояса (и даже календаря!) (Недавно я написал статью об их использовании, которую мне действительно нужно подключить... а>)
Тем не менее, если вас интересуют только даты в григорианском календаре, вы можете использовать большое целое число в следующем формате: ГГГГММДД, например, 19761203. Для вашего конкретного использования вы можете даже создать четырехзначное целое число, например ММДД, скажем, 1703. это должно привести к быстрому выбору!
SQLite имеет очень плохую поддержку хранения дат. Вы можете использовать метод, предложенный Nick D выше, но имейте в виду, что этот запрос приведет к полному сканированию таблицы, поскольку даты неправильно индексируются в SQLite (на самом деле SQLite вообще не поддерживает даты как встроенный тип).
Если вы действительно хотите сделать быстрый запрос, вам придется добавить отдельный (интегральный) столбец для хранения дня рождения (1-31) и прикрепить к нему индекс в базе данных.
Если вы хотите сравнивать только даты, вы можете добавить один столбец (INTEGER), в котором будет храниться значение даты в формате UTC (но этот трюк не позволит вам легко искать отдельные компоненты даты).
Удачи