SQLite поддържа пет функции за работа с дати и часове. Това са:
date()
time()
datetime()
julianday()
strftime()
Всички тези функции приемат времеви низ като аргумент. Те също така приемат други аргументи за модифициране/форматиране на изхода.
strftime()
функцията е най-универсалната функция от петте. Всъщност тази функция може да направи всичко, което другите четири могат.
С други думи, можете да използвате strftime()
за всички ваши изисквания за форматиране на дата и час. Останалите четири функции са налични единствено за удобство.
Синтаксис
Синтаксисът на всяка функция е както следва:
date(timestring, modifier, modifier, ...)
time(timestring, modifier, modifier, ...)
datetime(timestring, modifier, modifier, ...)
julianday(timestring, modifier, modifier, ...)
strftime(format, timestring, modifier, modifier, ...)
В първите четири функции първият аргумент е времеви низ, а всички последващи аргументи са модификатори.
В strftime()
функция първият аргумент е низът за форматиране, последван от низа за време и всякакви модификатори.
Всички валидни времеви низове и модификатори са изброени в долната част на тази статия.
Но първо, нека разгледаме няколко бързи примера за всяка от тези функции.
Функцията date()
Можете да използвате date()
функция с един аргумент или с множество аргументи.
Ето пример само с един аргумент:
SELECT date('now');
Резултат:
2020-04-23
Ето пример, който използва модификатор:
SELECT date('now', 'localtime');
Резултат:
2020-04-24
В този случай използвах localtime
модификатор. Този модификатор предполага, че низът от време е в универсално координирано време (UTC) и настройва времевия низ, така че да показва местно време.
Функцията time()
time()
функцията е подобна на date()
функция, с изключение на това, че извежда часа вместо дата.
Ето един пример:
SELECT time('now');
Резултат:
00:02:05
И ето го с localtime
модификатор:
SELECT time('now', 'localtime');
Резултат:
10:02:09
Функцията datetime()
SQLite datetime()
функцията комбинира предишните две функции, в смисъл, че извежда и датата, и часа.
Ето един пример:
SELECT datetime('now');
Резултат:
"2020-04-24 00:04:13"
И ето го с localtime
модификатор:
SELECT datetime('now', 'localtime');
Резултат:
"2020-04-24 10:04:46"
Функцията julianday()
julianday()
функцията връща непрекъснатия брой дни от началото на юлианския период, който е понеделник, 1 януари 4713 г. пр. н. е., пролептичен юлиански календар (24 ноември 4714 г. пр. н. е., в пролептичния григориански календар).
Ето как изглежда с now
като времеви низ:
SELECT julianday('now');
Резултат:
2458963.50964815
И тук се използва localtime
модификатор:
SELECT julianday('now', 'localtime');
Резултат:
2458963.92637685
Функцията strftime()
Както споменахме, strftime()
функцията може да се използва за извеждане на стойности за дата и час във всеки от форматите, налични в предишните функции.
Тази функция ви позволява да бъдете много конкретни с това как са форматирани вашите стойности за дата/час. Тя ви позволява да предоставите точния формат, в който искате да бъде представен.
Синтаксисът на тази функция е така:
strftime(format, timestring, modifier, modifier, ...)
Забележете, че първият аргумент е format
. Тук предоставяте формата, в който искате да бъде изведен времевият низ.
Форматният низ за 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('%Y-%m-%d %H:%M:%S', 'now');
Резултат:
"2020-04-24 00:43:51"
В този случай получаваме същия резултат като при използване на datetime()
функция.
Ето го с localtime
модификатор:
SELECT strftime('%Y-%m-%d %H:%M:%S', 'now', 'localtime');
Резултат:
"2020-04-24 10:45:27"
Отново същият резултат като при datetime()
. Разликата е в strftime()
ни позволява да посочим изрично формата на изхода.
Например:
SELECT strftime('%d/%m/%Y %H:%M:%S', 'now', 'localtime');
SELECT strftime('%m/%d/%Y (%H:%M:%S)', 'now', 'localtime');
SELECT strftime('%H:%M:%S on %d/%m/%Y', 'now', 'localtime');
Резултат:
"24/04/2020 10:49:41" "04/24/2020 (10:52:24)" "10:51:13 on 24/04/2020"
Валидни формати на низове за време
Аргументът на низа за време във всички функции за дата/час може да бъде предоставен във всеки от следните формати:
- ГГГГ-ММ-ДД
- ГГГГ-ММ-ДД ЧЧ:ММ
- ГГГГ-ММ-ДД ЧЧ:ММ:СС
- ГГГГ-ММ-ДД ЧЧ:ММ:СС.SSS
- ГГГГ-ММ-ДДТЧ:ММ
- ГГГГ-ММ-ДДТЧ:ММ:СС
- ГГГГ-ММ-ДДТЧ:ММ:СС.SSS
- ЧЧ:ММ
- ЧЧ:ММ:СС
- ЧЧ:ММ:СС.ССС
- сега
- DDDDDDDDDD
Валидни модификатори
Можете да използвате някой от следните модификатори с функции за дата/час:
- NNN дни
- NNN часа
- NNN минути
- NNN.NNNN секунди
- NNN месеца
- NNN години
- начало на месеца
- начало на годината
- начало на деня
- делен ден N
- unixepoch
- местно време
- utc
N
се отнася до число, което се добавя към датата въз основа на посочената единица.
Например:
SELECT
date('now'),
date('now', '3 days');
Резултат:
date('now') date('now', '3 days') ----------- --------------------- 2020-04-24 2020-04-27
Ето един, който използва start of month
като модификатор:
SELECT
date('now'),
date('now', 'start of month');
Резултат:
date('now') date('now', 'start of month') ----------- ----------------------------- 2020-04-24 2020-04-01