В MariaDB, TIMESTAMPDIFF() е вградена функция за дата и час, която връща разликата между два израза за дата или дата и час.
Синтаксис
Синтаксисът е така:
TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)
Където unit е една от следните стойности:
MICROSECONDSECONDMINUTEHOURDAYWEEKMONTHQUARTERYEAR
По избор единиците могат да имат префикс 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