sql >> Databáze >  >> RDS >> MariaDB

Jak funguje TIMEDIFF() v MariaDB

V MariaDB, TIMEDIFF() je vestavěná funkce data a času, která vrací rozdíl mezi dvěma hodnotami času nebo hodnotami data a času, vyjádřený jako hodnota času.

Je to podobné jako DATEDIFF() funkce, kromě DATEDIFF() Návratová hodnota je vyjádřena ve dnech.

TIMEDIFF() přijímá dva argumenty, oba jsou výrazy času nebo data a času. Poté odečte druhý čas od prvního.

Syntaxe

Syntaxe vypadá takto:

TIMEDIFF(expr1,expr2) 

Poté vrátí expr1 - expr2 .

Příklad

Zde je příklad:

SELECT TIMEDIFF('10:30:17', '1:10:10'); 

Výsledek:

+---------------------------------+| TIMEDIFF('10:30:17', '1:10:10') |+------------------------------- ---+| 09:20:07 |+---------------------------------+

Tady je to znovu, ale s prohozenými hodnotami času:

SELECT TIMEDIFF('1:10:10', '10:30:17'); 

Výsledek:

+---------------------------------+| TIMEDIFF('1:10:10', '10:30:17') |+------------------------------- ---+| -09:20:07 |+---------------------------------+

Hodnoty data a času

Zde je příklad, který používá hodnoty datetime:

SELECT TIMEDIFF('2030-01-25 00:00:00', '2030-01-20 23:59:59'); 

Výsledek:

+---------------------------------------------- ----------+| TIMEDIFF('2030-01-25 00:00:00', '2030-01-20 23:59:59') |+-------------------- ------------------------------------+| 96:00:01 |+------------------------------------------- -------------+

Smíšené typy hodnot

Zatímco TIMEDIFF() funguje na hodnotách čas i datum a čas, oba argumenty musí být stejného typu. Výsledkem smísení typů je null .

Příklad:

SELECT TIMEDIFF('2030-01-25 00:00:00', '23:59:59'); 

Výsledek:

+---------------------------------------------+ | TIMEDIFF('2030-01-25 00:00:00', '23:59:59') |+-------------------------- ---------------------+| NULL |+---------------------------------------------+ 

Mimo rozsah

Rozsah pro časové hodnoty je '-838:59:59.999999' na '838:59:59.999999' . Pokud je výsledek mimo tento rozsah, vrácená hodnota je horní mez příslušného rozsahu a je vráceno varování.

Příklad:

SELECT TIMEDIFF('2040-01-25 00:00:00', '2030-01-25 23:59:59'); 

Výsledek:

+---------------------------------------------- ----------+| TIMEDIFF('2040-01-25 00:00:00', '2030-01-25 23:59:59') |+--------------------- ------------------------------------+| 838:59:59 |+------------------------------------------- -------------+1 řádek v sadě, 1 varování (0,003 s)

Podívejme se na varování:

SHOW WARNINGS; 

Výsledek:

+---------+------+----------------------------- ------------------+| Úroveň | Kód | Zpráva |+---------+------+------------------------------ ------------------+| Upozornění | 1292 | Zkrácená nesprávná časová hodnota:'87624:00:01' |+---------+------+------------------- ----------------------------+

Aktuální datum

Zde předáme NOW() jako druhý argument:

SELECT 
    NOW(),
    TIMEDIFF('2021-05-27 10:00:00', NOW()); 

Výsledek:

+---------------------+------------------------ -----------------+| NYNÍ() | TIMEDIFF('2021-05-27 10:00:00', NOW()) |+----------------------+------- ---------------------------------+| 27.05.2021 14:29:38 | -04:29:38 |+---------------------+-------------------- --------------------+

Neplatné argumenty

Po předání neplatných argumentů TIMEEDIFF() vrátí null :

SELECT TIMEDIFF('Homer', 'Simpson'); 

Výsledek:

+------------------------------+| TIMEDIFF('Homer', 'Simpson') |+------------------------------+| NULL |+------------------------------+

Chybí argument

Volání TIMEDIFF() nesprávný počet argumentů nebo bez předání jakýchkoli argumentů vede k chybě:

SELECT TIMEDIFF(); 

Výsledek:

CHYBA 1582 (42000):Nesprávný počet parametrů ve volání nativní funkce 'TIMEDIFF'

A:

SELECT TIMEDIFF('2030-05-21'); 

Výsledek:

CHYBA 1582 (42000):Nesprávný počet parametrů ve volání nativní funkce 'TIMEDIFF'

  1. FrankenQueries:když dojde ke kolizi SQL a NoSQL

  2. SQL Server 2012 Service Pack 1 a kumulativní aktualizace 1

  3. Jak uniknout znaky <,> a &do html entit v Oracle PL/SQL

  4. Proč IS NOT NULL vrací hodnoty NULL pro Varchar(max) v SQL Server?