MariaDB
 sql >> Database >  >> RDS >> MariaDB

HOUR() vs EXTRACT(HOUR …) in MariaDB:qual è la differenza?

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, restituisce 838 )
  • EXTRACT(HOUR FROM ...) restituisce un valore compreso tra 0 e 23 . Se l'ora è al di fuori di questo intervallo, EXTRACT() itererà attraverso 0 e 23 tutte le volte necessarie per restituire un valore compreso tra 0 e 23 .

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 |
+-------------------+--------------------------------+