sql >> Database >  >> RDS >> MariaDB

HOUR() vs EXTRACT(HOUR ...) in MariaDB:wat is het verschil?

MariaDB heeft een HOUR() functie die het uurgedeelte extraheert uit een tijdwaarde. MariaDB heeft ook een EXTRACT() functie die ook het uurgedeelte uit een tijdwaarde kan halen.

Deze functies geven echter niet altijd hetzelfde resultaat.

Lees verder om het verschil te zien tussen HOUR() en EXTRACT(HOUR FROM ...) in MariaDB.

Het verschil

Het HOUR() en EXTRACT(HOUR FROM ...) beide retourneren dezelfde waarde als de tijdexpressie een tijdsuitdrukking is. Dat wil zeggen, als het uurgedeelte tussen 0 . ligt en 23 , dan retourneren ze hetzelfde resultaat.

Het verschil manifesteert zich wanneer het uurdeel groter is dan 23 .

TIME waarden kunnen in het bereik liggen '-838:59:59.999999' naar '838:59:59.999999' , maar een waarde voor de tijd van de dag kan alleen tussen 0 . liggen en 23 .

Als de tijduitdrukking buiten de 0 valt en 23 bereik:

  • HOUR() retourneert het werkelijke uurgedeelte van de uitdrukking (zolang het binnen het bereik '-838:59:59.999999' ligt naar '838:59:59.999999' – indien buiten dit bereik, retourneert het 838 )
  • EXTRACT(HOUR FROM ...) retourneert een waarde tussen 0 en 23 . Als het uur buiten dit bereik valt, EXTRACT() herhaalt 0 en 23 zo vaak als nodig is om een ​​waarde tussen 0 . te retourneren en 23 .

Voorbeeld

Hier is een voorbeeld om te demonstreren.

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

Resultaat:

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

Het HOUR() functie retourneert het werkelijke uur dat is opgegeven, terwijl EXTRACT() retourneert 0 . Dit komt omdat 24 is hoger dan 23 , wat de hoogste waarde is EXTRACT() zal terugkeren voor het uurgedeelte. In dit geval EXTRACT() begint de telling opnieuw, beginnend bij 0 .

Het blijft dit zo vaak doen als nodig is, zodat het resultaat altijd tussen 0 . ligt en 23 .

Hier is nog een voorbeeld met een veel groter uurdeel:

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

Resultaat:

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


  1. 4 functies om de maand van een datum in MariaDB te retourneren

  2. JShell gebruiken in Java 9 in NetBeans 9.0, deel 4

  3. Converteer PostgreSQL-array naar PHP-array

  4. Waarom lijk ik Oracle 11g niet te dwingen meer CPU's te verbruiken voor een enkele SQL-query?