Как сохранить и получить значение даты и времени в SQLite - PullRequest
10 голосов
/ 11 сентября 2009

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

Ответы [ 3 ]

7 голосов
/ 11 сентября 2009

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

SELECT * FROM mytable
WHERE strftime('%m-%d', 'now') = strftime('%m-%d', birthday)
5 голосов
/ 14 сентября 2009

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

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

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

4 голосов
/ 13 сентября 2009

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

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

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

Удачи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...