MariaDB har en HOUR()
funktion, der udtrækker timedelen fra en tidsværdi. MariaDB har også en EXTRACT()
funktion, der også kan udtrække timedelen fra en tidsværdi.
Disse funktioner returnerer dog ikke altid det samme resultat.
Læs videre for at se forskellen mellem HOUR()
og EXTRACT(HOUR FROM ...)
i MariaDB.
Forskellen
HOUR()
og EXTRACT(HOUR FROM ...)
begge returnerer den samme værdi, når tidsudtrykket er et tidspunkt på dagen. Det vil sige, hvis timedelen er mellem 0
og 23
, så returnerer de det samme resultat.
Forskellen viser sig, når timedelen er større end 23
.
TIME
værdier kan være i området '-838:59:59.999999'
til '838:59:59.999999'
, men en værdi for tidspunktet på dagen kan kun være mellem 0
og 23
.
Hvis tidsudtrykket er uden for 0
og 23
rækkevidde:
HOUR()
returnerer den faktiske timedel fra udtrykket (så længe det er inden for området'-838:59:59.999999'
til'838:59:59.999999'
– hvis uden for dette område, returnerer det838
)EXTRACT(HOUR FROM ...)
returnerer en værdi mellem0
og23
. Hvis timen er uden for dette interval,EXTRACT()
vil iterere gennem0
og23
så mange gange som nødvendigt for at returnere en værdi mellem0
og23
.
Eksempel
Her er et eksempel til at demonstrere.
SELECT
HOUR('24:00:00'),
EXTRACT(HOUR FROM '24:00:00');
Resultat:
+------------------+-------------------------------+ | HOUR('24:00:00') | EXTRACT(HOUR FROM '24:00:00') | +------------------+-------------------------------+ | 24 | 0 | +------------------+-------------------------------+
HOUR()
funktion returnerer den faktiske time, der blev angivet, mens EXTRACT()
returnerer 0
. Dette er fordi 24
er højere end 23
, som er den højeste værdi EXTRACT()
vender tilbage til timeportionen. I dette tilfælde EXTRACT()
starter optællingen igen, startende ved 0
.
Det vil blive ved med at gøre dette så mange gange, som det skal, så resultatet altid er mellem 0
og 23
.
Her er endnu et eksempel med en meget større timedel:
SELECT
HOUR('742:00:00'),
EXTRACT(HOUR FROM '742:00:00');
Resultat:
+-------------------+--------------------------------+ | HOUR('742:00:00') | EXTRACT(HOUR FROM '742:00:00') | +-------------------+--------------------------------+ | 742 | 22 | +-------------------+--------------------------------+