SQLite имеет ряд встроенных функций для работы с датами и временем:
DATE() возвращает дату в формате "YYYY-MM-DD". Имеет следующее определение:
date(time-value, modifier, modifier, ...)
TIME() вычисляет время. Имеет следующее определение:
time(time-value, modifier, modifier, ...)
DATETIME() вычисляет дату и время. Имеет следующее определение:
datetime(time-value, modifier, modifier, ...)
JULIANDAY() возвращает количество дней с момента начала юлианского периода (24 ноября 4714 до н.э.) в виде значения REAL. Имеет следующее определение:
julianday(time-value, modifier, modifier, ...)
STRFTIME() форматирует дату. Имеет следующее определение:
strftime(format, time-value, modifier, modifier, ...)
Если первым четырем функциям не передаются параметры, то они вычисляют текущие дату и время:
SELECT date() AS date, time() AS time, datetime() AS datetime, julianday() AS julian;
В качестве параметра time-value
эти функций могут получать дату и время в следующих форматах:
YYYY-MM-DD
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.SSS
YYYY-MM-DDTHH:MM
(в качестве разделителя между датой и временем применяется разделитель - символ T в соответствии со
стандартом ISO-8601)
YYYY-MM-DDTHH:MM:SS
YYYY-MM-DDTHH:MM:SS.SSS
HH:MM
HH:MM:SS
HH:MM:SS.SSS
now
(представляет текущую дату и время),
например
SELECT datetime('now');
DDDDDDDDDD
(представляет количество дней с начала юлианской эпохи в виде значения INTEGER или REAL),
например
SELECT datetime(1092941466);
Передадим в функции для даты и времени значения в некоторых из этих форматах:
SELECT date('2004-04-21') AS date, -- YYYY-MM-DD time('16:45:21') AS time, -- HH:MM:SS datetime('2004-04-21T16:45') AS datetime, -- YYYY-MM-DDTHH:MM julianday('2004-04-21 16:45:21') AS julian; -- YYYY-MM-DD HH:MM:SS
В качестве дополнительных параметров в функции для работы с датами и временем могут передаваться модификаторы, которые позволяют уточнить дату и время. В SQLite применяются следующие модификаторы:
NNN days
: задает смещение на несколько дней. Например, получение даты, которая была 7 дней до определенной:
SELECT date('2021-12-31', '-7 days'); -- 2021-12-24
NNN hours
: задает смещение на несколько часов. Например, получение времени, которое будет через три часа:
SELECT time('19:12', '3 hours'); -- 22:12:00
NNN minutes
: задает смещение на несколько минут.
SELECT time('19:12', '35 minutes'); -- 19:47:00
NNN.NNNN seconds
: задает смещение на секунд.
SELECT time('19:12', '-45.1 seconds'); -- 19:11:14
NNN months
: задает смещение на месяцев.
SELECT date('2021-12-31', '-7 months'); -- 2021-05-31
NNN years
: задает смещение на несколько лет.
SELECT date('2021-12-31', '11 years'); -- 2032-12-31
start of month
: сдвигает дату на первый день месяца:
SELECT date('2021-11-26', 'start of month'); -- 2021-11-01
start of year
: сдвигает дату на первый день года:
SELECT date('2021-11-26', 'start of year'); -- 2021-01-01
start of day
: сдвигает время на начало дня:
SELECT time('16:32', 'start of day'); -- 00:00:00
weekday N
: сдвигает дату на определенный день текущей недели/ Для воскресения передается число 0, для понедельника - число 1
и так далее:
SELECT date('2021-12-01', 'weekday 0'), -- 2021-12-05 date('2021-12-01', 'weekday 1'), -- 2021-12-06 date('2021-12-01', 'weekday 6'); -- 2021-12-04
unixepoch
возвращает количество секунд, которые прошли с момента начала эпохи UNIX. Работает правильно только с форматом "DDDDDDDDDD"
localtime
: получает локальное время
utc
: получает время относительно UTC
SELECT time('12:33:24', 'localtime'), -- 16:33:24 time('16:33:24', 'utc'); -- 12:33:24
Можно передавать сразу несколько модификаторов:
SELECT date('now', '-2 days', '1 months'), -- 2021-12-29 datetime('2021-12-01 12:33', 'start of day', '5 days'); -- 2021-12-06 00:00:00
Функция strftime, которая форматирует дату и время, в качестве первого параметра принимает строку форматирования. Строка форматирования может принимать следующие параметры:
%d
: день месяца в формате 00
%f
: секунды в формате SS.SSS
%H
: час в формате 00-24
%j
: день года в формате 001-366
%J
: количество дней с начала юлианской эпохи
%m
: месяц в формате 01-12
%M
: минута в формате 00-59
%s
: количество секунда с 1970-01-01
%S
: секунды в формате 00-59
%w
: день недели в формате 0-6, где воскресение имеет номер 0
%W
: номер недели года в формате 00-53
%Y
: год в формате 0000-9999
%%
: экраниурет символ %
Пример форматирования:
SELECT strftime('%d.%m.%Y', '2021-12-01'); -- 01.12.2021