Може би сте забелязали, че MySQL има TIMEDIFF() функция и SUBTIME() функция. И може би сте забелязали, че в много случаи и двете връщат един и същ резултат. Така че може би се чудите каква е разликата между тези две функции?
Нека разберем.
Синтаксис
Първо нека разгледаме синтаксиса на всяка функция.
SUBTIME()
SUBTIME(expr1,expr2)
Където expr1 е израз за време или дата и час и expr2 е времеви израз.
TIMEDIFF()
TIMEDIFF(expr1,expr2)
Където expr1 и expr2 са изрази за време или дата и час, но и двата трябва да са от един и същи тип.
Разликата
Ето разликата:
- При използване на
SUBTIME(), вторият аргумент трябва да бъде израз за време . - Когато използвате
TIMEDIFF()вторият аргумент може да бъде израз за време или дата и час, но и в двата случая трябва да е от същия тип като първия израз .
Пример 1 – И двата аргумента са „време“ стойности
Ето сравнение на двете функции, където и двата аргумента са времеви стойности.
SELECT
TIMEDIFF('11:35:25', '10:35:25') AS 'TIMEDIFF',
SUBTIME('11:35:25', '10:35:25') AS 'SUBTIME';
Резултат:
+----------+----------+ | TIMEDIFF | SUBTIME | +----------+----------+ | 01:00:00 | 01:00:00 | +----------+----------+
Както се очаква, и двете функции връщат един и същ резултат.
Пример 2 – И двата аргумента са стойности „datetime“
Ето сравнение на двете функции, където и двата аргумента са стойности за дата и час.
SELECT
TIMEDIFF('2021-02-01 10:35:25', '2021-01-01 10:35:25') AS 'TIMEDIFF',
SUBTIME('2021-02-01 10:35:25', '2021-01-01 10:35:25') AS 'SUBTIME';
Резултат:
+-----------+---------+ | TIMEDIFF | SUBTIME | +-----------+---------+ | 744:00:00 | NULL | +-----------+---------+
В този случай SUBTIME() върна стойност null, тъй като вторият му аргумент не беше стойност за време (беше стойност за дата и час).
Пример 3 – Първият аргумент е „datetime“, вторият е „time“
Тук първият аргумент е стойност за дата и час. Вторият аргумент е времева стойност.
SELECT
TIMEDIFF('2021-02-01 10:35:25', '09:35:25') AS 'TIMEDIFF',
SUBTIME('2021-02-01 10:35:25', '09:35:25') AS 'SUBTIME';
Резултат:
+----------+---------------------+ | TIMEDIFF | SUBTIME | +----------+---------------------+ | NULL | 2021-02-01 01:00:00 | +----------+---------------------+
В този случай TIMEDIFF() върна нулева стойност, защото и двата аргумента са от различен тип.
Пример 4 – Първият аргумент е „време“, вторият е „дата и час“
И ето, ние го разменяме. Първият аргумент е времева стойност. Вторият аргумент е стойност за дата и час.
SELECT
TIMEDIFF('09:35:25', '2021-01-01 10:35:25') AS 'TIMEDIFF',
SUBTIME('09:35:25', '2021-01-01 10:35:25') AS 'SUBTIME';
Резултат:
+----------+---------+ | TIMEDIFF | SUBTIME | +----------+---------+ | NULL | NULL | +----------+---------+
В този случай:
TIMEDIFF()върна нулева стойност, тъй като и двата аргумента бяха от различен тип.SUBTIME()върна нулева стойност, защото приема стойност за време само за втория си аргумент.