В MariaDB, TIMESTAMPDIFF()
е вградена функция за дата и час, която връща разликата между два израза за дата или дата и час.
Синтаксис
Синтаксисът е така:
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
Където unit
е една от следните стойности:
MICROSECOND
SECOND
MINUTE
HOUR
DAY
WEEK
MONTH
QUARTER
YEAR
По избор единиците могат да имат префикс SQL_TSI_
.
TIMESTAMPDIFF()
връща datetime_expr2
– datetime_expr1
.
Единият израз може да бъде дата, а другият дата и час. Стойностите за дата се третират като имащи времева част от 00:00:00
където е необходимо.
Пример
Ето пример за демонстрация:
SELECT TIMESTAMPDIFF(DAY, '2030-02-01', '2030-03-01');
Резултат:
+------------------------------------------------------- --+| TIMESTAMPDIFF(ДЕН, '2030-02-01', '2030-03-01') |+---------------------------- --------------------+| 28 |+-------------------------------------------------- -+
Отрицателен резултат
Превключването на датите дава отрицателен резултат:
SELECT TIMESTAMPDIFF(DAY, '2030-03-01', '2030-02-01');
Резултат:
+------------------------------------------------------- --+| TIMESTAMPDIFF(ДЕН, '2030-03-01', '2030-02-01') |+---------------------------- --------------------+| -28 |+------------------------------------------------------- --+
Стойности за дата и час
Ето пример за предаване на стойност за дата и час:
SELECT TIMESTAMPDIFF(
HOUR,
'2030-02-01 00:00:00',
'2030-02-01 12:30:45'
)
AS Result;
Резултат:
<пред>+--------+| Резултат |+--------+| 12 |+--------+
Посочих HOUR
, и така игнорира частта от минутите и секундите.
Смесени типове
Ето пример за предаване както на дата, така и на стойност за дата и час:
SELECT TIMESTAMPDIFF(
HOUR,
'2030-02-01',
'2030-02-01 12:30:45'
)
AS Result;
Резултат:
<пред>+--------+| Резултат |+--------+| 12 |+--------+
Както бе споменато, стойностите на датата се третират като имащи времева част от 00:00:00
.
Добавяне на SQL_TSI_
Префикс
Устройството може да включва SQL_TSI_
префикс, ако е необходимо:
SELECT TIMESTAMPDIFF(
SQL_TSI_YEAR,
'2030-02-01',
'2035-02-01'
)
AS Result;
Резултат:
+--------+| Резултат |+--------+| 5 |+-------+
Микросекунди
Ето пример, който връща микросекунди:
SELECT TIMESTAMPDIFF(
MICROSECOND,
'2030-02-01 10:30:45.000000',
'2030-02-01 10:30:45.123456'
)
AS Result;
Резултат:
<пред>+--------+| Резултат |+--------+| 123456 |+--------+Ето един, при който микросекундите всъщност не са посочени в стойностите за дата и час:
SELECT TIMESTAMPDIFF(
MICROSECOND,
'2030-02-01 10:30:45',
'2030-02-01 12:30:45'
)
AS Result;
Резултат:
+-----------+| Резултат |+-----------+| 7200000000 |+-----------+
Текуща дата
Можем да предадем NOW()
един от аргументите datetime, за да сравните текущата дата и час с друга дата:
SELECT
NOW(),
TIMESTAMPDIFF(DAY, NOW(), '2021-03-31') AS Diff;
Резултат:
+---------------------+-----+| СЕГА() | Разлика |+---------------------+-----+| 30.05.2021 09:29:01 | -60 |+---------------------+-----+
Нулеви дати
Ако една от датите е null
, резултатът е null
:
SELECT TIMESTAMPDIFF(
YEAR,
'2030-02-01',
NULL
)
AS Result;
Резултат:
+--------+| Резултат |+--------+| NULL |+--------+
Липсващ аргумент
Извикване на TIMESTAMPDIFF()
с грешен брой аргументи или без подаване на аргументи, води до грешка:
SELECT TIMESTAMPDIFF();
Резултат:
ГРЕШКА 1064 (42000):Имате грешка във вашия SQL синтаксис; проверете ръководството, което съответства на вашата версия на сървъра на MariaDB за правилния синтаксис, който да използвате близо до ')' на ред 1
И още един пример:
SELECT TIMESTAMPDIFF('2020-12-09');
Резултат:
ГРЕШКА 1064 (42000):Имате грешка във вашия SQL синтаксис; проверете ръководството, което съответства на вашата версия на сървъра на MariaDB за правилния синтаксис, който да използвате близо до '10, '2020-12-09')' на ред 1