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 het838
)EXTRACT(HOUR FROM ...)
retourneert een waarde tussen0
en23
. Als het uur buiten dit bereik valt,EXTRACT()
herhaalt0
en23
zo vaak als nodig is om een waarde tussen0
. te retourneren en23
.
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 | +-------------------+--------------------------------+