Може би сте забелязали, че 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()
върна нулева стойност, защото приема стойност за време само за втория си аргумент.