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

В целом ответ будет "Нет". Вы изменяете структуру таблицы, которая потенциально потребует большого количества обновлений", и я определенно соглашаюсь с этим. Если Вы будете ожидать делать это часто, то я предложу альтернативу "фиктивным" столбцам - использование VIEW с вместо таблиц для SELECT данные луга. IIRC, изменяя определение представления относительно легок, и косвенность посредством представления сделана, когда план запросов компилируется. Расход - то, что необходимо было бы добавить столбец к новой таблице и сделать представление JOIN в столбце.

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

Просто мысль.

10
задан 11 September 2009 в 07:22
поделиться

3 ответа

Попробуйте следующий запрос:

SELECT * FROM mytable
WHERE strftime('%m-%d', 'now') = strftime('%m-%d', birthday)
7
ответ дан 3 December 2019 в 22:01
поделиться

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

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

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

5
ответ дан 3 December 2019 в 22:01
поделиться

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

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

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

Удачи

4
ответ дан 3 December 2019 в 22:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: