Mysql
 sql >> база данни >  >> RDS >> Mysql

TIMEDIFF() срещу SUBTIME() в MySQL:Каква е разликата?

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разгръщане и управление на MySQL NDB клъстер с ClusterControl

  2. Урок за MySQL – Конфигуриране и управление на SSL на вашия MySQL сървър

  3. CURRENT_DATE/CURDATE() не работи като стойност на DATE по подразбиране

  4. Мониторинг и управление на операциите на MySQL 8.0 с ClusterControl

  5. Бързо изградете PHP CRUD интерфейс с PDO Advanced CRUD Generator Tool