MariaDB har en HOUR()
funktion som extraherar timdelen från ett tidsvärde. MariaDB har också en EXTRACT()
funktion som också kan extrahera timdelen från ett tidsvärde.
Dessa funktioner ger dock inte alltid samma resultat.
Läs vidare för att se skillnaden mellan HOUR()
och EXTRACT(HOUR FROM ...)
i MariaDB.
Skillnaden
HOUR()
och EXTRACT(HOUR FROM ...)
båda returnerar samma värde när tidsuttrycket är ett tidsuttryck. Det vill säga om timdelen är mellan 0
och 23
, då returnerar de samma resultat.
Skillnaden visar sig när timdelen är större än 23
.
TIME
värden kan ligga inom intervallet '-838:59:59.999999'
till '838:59:59.999999'
, men ett värde för tid på dagen kan bara vara mellan 0
och 23
.
Om tidsuttrycket är utanför 0
och 23
intervall:
HOUR()
returnerar den faktiska timdelen från uttrycket (så länge den ligger inom intervallet'-838:59:59.999999'
till'838:59:59.999999'
– om det ligger utanför detta intervall returnerar det838
)EXTRACT(HOUR FROM ...)
returnerar ett värde mellan0
och23
. Om timmen är utanför detta intervall,EXTRACT()
kommer att upprepas genom0
och23
så många gånger som behövs för att returnera ett värde mellan0
och23
.
Exempel
Här är ett exempel att visa.
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 returnerar den faktiska timmen som angavs, medan EXTRACT()
returnerar 0
. Detta beror på att 24
är högre än 23
, vilket är det högsta värdet EXTRACT()
kommer tillbaka för timdelen. I det här fallet, EXTRACT()
startar räkningen igen, med start vid 0
.
Det kommer att fortsätta göra detta så många gånger som det behöver, så att resultatet alltid är mellan 0
och 23
.
Här är ett annat exempel med en mycket större timdel:
SELECT
HOUR('742:00:00'),
EXTRACT(HOUR FROM '742:00:00');
Resultat:
+-------------------+--------------------------------+ | HOUR('742:00:00') | EXTRACT(HOUR FROM '742:00:00') | +-------------------+--------------------------------+ | 742 | 22 | +-------------------+--------------------------------+