MariaDB ha un HOUR()
funzione che estrae la parte dell'ora da un valore temporale. MariaDB ha anche un EXTRACT()
funzione che può anche estrarre la parte dell'ora da un valore di tempo.
Tuttavia, queste funzioni non restituiscono sempre lo stesso risultato.
Continua a leggere per vedere la differenza tra HOUR()
e EXTRACT(HOUR FROM ...)
in MariaDB.
La differenza
Il HOUR()
e EXTRACT(HOUR FROM ...)
entrambi restituiscono lo stesso valore quando l'espressione dell'ora è un'espressione dell'ora del giorno. Cioè, se la parte dell'ora è compresa tra 0
e 23
, quindi restituiscono lo stesso risultato.
La differenza si manifesta quando la parte dell'ora è maggiore di 23
.
TIME
i valori possono essere compresi nell'intervallo '-838:59:59.999999'
a '838:59:59.999999'
, ma un valore dell'ora può essere solo compreso tra 0
e 23
.
Se l'espressione dell'ora è al di fuori di 0
e 23
gamma:
HOUR()
restituisce la parte dell'ora effettiva dall'espressione (purché sia compresa nell'intervallo'-838:59:59.999999'
a'838:59:59.999999'
– se al di fuori di questo intervallo, restituisce838
)EXTRACT(HOUR FROM ...)
restituisce un valore compreso tra0
e23
. Se l'ora è al di fuori di questo intervallo,EXTRACT()
itererà attraverso0
e23
tutte le volte necessarie per restituire un valore compreso tra0
e23
.
Esempio
Ecco un esempio da dimostrare.
SELECT
HOUR('24:00:00'),
EXTRACT(HOUR FROM '24:00:00');
Risultato:
+------------------+-------------------------------+ | HOUR('24:00:00') | EXTRACT(HOUR FROM '24:00:00') | +------------------+-------------------------------+ | 24 | 0 | +------------------+-------------------------------+
Il HOUR()
la funzione restituisce l'ora effettiva fornita, mentre EXTRACT()
restituisce 0
. Questo perché 24
è maggiore di 23
, che è il valore più alto EXTRACT()
tornerà per la parte dell'ora. In questo caso, EXTRACT()
ricomincia il conteggio, partendo da 0
.
Continuerà a farlo tutte le volte che è necessario, in modo che il risultato sia sempre compreso tra 0
e 23
.
Ecco un altro esempio con una parte oraria molto più grande:
SELECT
HOUR('742:00:00'),
EXTRACT(HOUR FROM '742:00:00');
Risultato:
+-------------------+--------------------------------+ | HOUR('742:00:00') | EXTRACT(HOUR FROM '742:00:00') | +-------------------+--------------------------------+ | 742 | 22 | +-------------------+--------------------------------+