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

HOUR() vs EXTRACT(HOUR …) v MariaDB:Jaký je rozdíl?

MariaDB má HOUR() funkce, která extrahuje hodinovou část z časové hodnoty. MariaDB má také EXTRACT() funkce, která také dokáže extrahovat hodinovou část z časové hodnoty.

Tyto funkce však ne vždy vrátí stejný výsledek.

Čtěte dále, abyste viděli rozdíl mezi HOUR() a EXTRACT(HOUR FROM ...) v MariaDB.

Rozdíl

HOUR() a EXTRACT(HOUR FROM ...) oba vrátí stejnou hodnotu, když je časový výraz výrazem denní doby. To znamená, že pokud je hodinová část mezi 0 a 23 , pak vrátí stejný výsledek.

Rozdíl se projeví, když je hodinová část větší než 23 .

TIME hodnoty mohou být v rozsahu '-838:59:59.999999' na '838:59:59.999999' , ale hodnota denní doby může být pouze mezi 0 a 23 .

Pokud je časový výraz mimo 0 a 23 rozsah:

  • HOUR() vrátí skutečnou část hodiny z výrazu (pokud je v rozsahu '-838:59:59.999999' na '838:59:59.999999' – pokud je mimo tento rozsah, vrátí 838 )
  • EXTRACT(HOUR FROM ...) vrátí hodnotu mezi 0 a 23 . Pokud je hodina mimo tento rozsah, EXTRACT() bude iterovat přes 0 a 23 tolikrát, kolikrát je potřeba, aby se vrátila hodnota mezi 0 a 23 .

Příklad

Zde je příklad k demonstraci.

SELECT 
    HOUR('24:00:00'),
    EXTRACT(HOUR FROM '24:00:00');

Výsledek:

+------------------+-------------------------------+
| HOUR('24:00:00') | EXTRACT(HOUR FROM '24:00:00') |
+------------------+-------------------------------+
|               24 |                             0 |
+------------------+-------------------------------+

HOUR() funkce vrací skutečnou hodinu, která byla poskytnuta, zatímco EXTRACT() vrátí 0 . Důvodem je 24 je vyšší než 23 , což je nejvyšší hodnota EXTRACT() se vrátí na hodinovou část. V tomto případě EXTRACT() spustí počítání znovu, počínaje 0 .

Bude to dělat tolikrát, kolikrát bude potřeba, takže výsledek bude vždy mezi 0 a 23 .

Zde je další příklad s mnohem větší hodinovou částí:

SELECT 
    HOUR('742:00:00'),
    EXTRACT(HOUR FROM '742:00:00');

Výsledek:

+-------------------+--------------------------------+
| HOUR('742:00:00') | EXTRACT(HOUR FROM '742:00:00') |
+-------------------+--------------------------------+
|               742 |                             22 |
+-------------------+--------------------------------+


  1. INSERT s názvem dynamické tabulky ve funkci spouštění

  2. Extrahujte měsíc z data v PostgreSQL

  3. PG::InvalidParameterValue:ERROR:neplatná hodnota parametru client_min_messages:panic

  4. Existuje SQL Server Profiler pro SQL Server Express?