В MySQL можете да използвате SUBTIME()
функция за изваждане на стойност за време от израз за време или дата и час.
Начинът, по който работи, е, че предоставяте два аргумента; първата е стойност за час или дата и час, а втората е стойност за време. SUBTIME()
функцията след това изважда втория аргумент от първия и връща резултата.
Синтаксис
Синтаксисът е така:
SUBTIME(expr1,expr2)
Където expr1
може да бъде израз за време или дата и час и expr2
е времеви израз.
И така expr2
се изважда от expr1
.
Пример 1 – Основна употреба
Ето пример за демонстрация.
SELECT SUBTIME('12:35:00', '1:30');
Резултат:
+-----------------------------+ | SUBTIME('12:35:00', '1:30') | +-----------------------------+ | 11:05:00 | +-----------------------------+
Пример 2 – Изваждане на секунди
В този пример също изваждам няколко секунди от стойността на времето.
SELECT SUBTIME('12:35:00', '1:30:30');
Резултат:
+--------------------------------+ | SUBTIME('12:35:00', '1:30:30') | +--------------------------------+ | 11:04:30 | +--------------------------------+
И получаваме същия резултат, дори ако пропуснем частта от секундите от първоначалния аргумент за време.
SELECT SUBTIME('12:35', '1:30:30');
Резултат:
+-----------------------------+ | SUBTIME('12:35', '1:30:30') | +-----------------------------+ | 11:04:30 | +-----------------------------+
Пример 3 – Частични секунди
Можете също да извадите частта от секундите.
SELECT SUBTIME('12:35:00.888888', '1:30:30.555555');
Резултат:
+----------------------------------------------+ | SUBTIME('12:35:00.888888', '1:30:30.555555') | +----------------------------------------------+ | 11:04:30.333333 | +----------------------------------------------+
Пример 4 – Отрицателни резултати
Напълно валидно е да завършите с отрицателна стойност за вашия резултат.
SELECT SUBTIME('12:35:00', '20:30:30');
Резултат:
+---------------------------------+ | SUBTIME('12:35:00', '20:30:30') | +---------------------------------+ | -07:55:30 | +---------------------------------+
Пример 5 – Изваждане от стойност за дата и час
В този пример изваждам от стойност за дата и час (за разлика само от стойност за време, както в предишните примери).
SELECT SUBTIME('2021-01-01 12:35:00', '1:30:30');
Резултат:
+-------------------------------------------+ | SUBTIME('2021-01-01 12:35:00', '1:30:30') | +-------------------------------------------+ | 2021-01-01 11:04:30 | +-------------------------------------------+
В този случай частта за дата е непроменена, тъй като вторият аргумент не е достатъчно голям, за да го повлияе.
В този следващ пример увеличавам втория аргумент, така че да е достатъчно голям, за да повлияе на частта с датата.
SELECT SUBTIME('2021-01-01 12:35:00', '100:30:30');
Резултат:
+---------------------------------------------+ | SUBTIME('2021-01-01 12:35:00', '100:30:30') | +---------------------------------------------+ | 2020-12-28 08:04:30 | +---------------------------------------------+
Както се вижда в този пример, стойностите на времето не са ограничени до по-малко от 24 часа (те могат да варират от -838:59:59 до 838:59:59 .
Можете обаче да правите неща като това:
SELECT SUBTIME('2021-01-01 12:35:00', '4 4:30:30');
Резултат:
+---------------------------------------------+ | SUBTIME('2021-01-01 12:35:00', '4 4:30:30') | +---------------------------------------------+ | 2020-12-28 08:04:30 | +---------------------------------------------+
Пример 6 – Ограничения на времевата стойност
Както споменахме, типът данни за времето може да варира от -838:59:59 до 838:59:59 . Това означава, че не можете да извадите повече от това. Това също така означава, че резултатът не може да бъде извън този диапазон. Например, не можете да направите това:
SELECT SUBTIME('12:35:00', '20000000:30:30');
Резултат:
+---------------------------------------+ | SUBTIME('12:35:00', '20000000:30:30') | +---------------------------------------+ | -826:24:59 | +---------------------------------------+ 1 row in set, 1 warning (0.01 sec)
Резултатът е напълно грешен и MySQL показва предупреждение.
Но това не е само вторият аргумент, с който трябва да внимавате. Също така ще срещнете същия проблем, ако първият аргумент първоначално е отрицателна стойност:
SELECT SUBTIME('-800:35:00', '50:30:30');
Резултат:
+-----------------------------------+ | SUBTIME('-800:35:00', '50:30:30') | +-----------------------------------+ | -838:59:59 | +-----------------------------------+ 1 row in set, 1 warning (0.00 sec)