Хранение даты и времени в SQLite

Хранение даты и времени в SQLite

Так вышло, что прекрасная SQLite не имеет типа данных DATE, DATETIME, TIMESTAMP или аналогичных, которые позволяют удобно хранить дату и время.

Официальная документация (очень рекомендую к прочтению) предлагает использовать типы TEXT или INTEGER и хранить дату в них, либо в виде строки YYYY-MM-DD HH:MM:SS или в секундах как время Unix (в секундах с 1 января 1970 года)

Если мы храним дату в виде строки YYYY-MM-DD, то вроде даже все круто: сортировка, индексы – все есть. Но сложно будет отобрать записи с датой, которая отличается на 10 минут, например.

В случае хранения даты в секундах – это просто: 10 минут – это 600 секунд, вычитай сколько угодно. Сортировки, индексы по числам работают прекрасно. Но смотреть на время в секундах глазами – то еще удовольствие.

Но есть специальные функции date(), time(), datetime(), которые умеют “делать” из секунд строки:

SELECT date(1600000000, 'unixepoch'); -- 2020-09-13 
SELECT time(1600000000, 'unixepoch'); -- 12:26:40 
SELECT datetime(1600000000, 'unixepoch'); -- 2020-09-13 12:26:40

Если нужно локальное время, то добавляем ‘localtime’:

SELECT datetime(1600000000, 'unixepoch', 'localtime');

Одним словом, все стало просто, удобно и понятно.

Добавить комментарий