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-24NNN hours: задает смещение на несколько часов. Например, получение времени, которое будет через три часа:
SELECT time('19:12', '3 hours'); -- 22:12:00NNN minutes: задает смещение на несколько минут.
SELECT time('19:12', '35 minutes'); -- 19:47:00NNN.NNNN seconds: задает смещение на секунд.
SELECT time('19:12', '-45.1 seconds'); -- 19:11:14NNN months: задает смещение на месяцев.
SELECT date('2021-12-31', '-7 months'); -- 2021-05-31NNN years: задает смещение на несколько лет.
SELECT date('2021-12-31', '11 years'); -- 2032-12-31start of month: сдвигает дату на первый день месяца:
SELECT date('2021-11-26', 'start of month'); -- 2021-11-01start of year: сдвигает дату на первый день года:
SELECT date('2021-11-26', 'start of year'); -- 2021-01-01start of day: сдвигает время на начало дня:
SELECT time('16:32', 'start of day'); -- 00:00:00weekday 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