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

4 funzioni per ottenere l'ora da un valore temporale in MariaDB

Di seguito sono elencate 4 funzioni che consentono di restituire l'ora da un valore di tempo in MariaDB.

Il HOUR() Funzione

Il HOUR() la funzione restituisce l'ora per un dato TIME o DATETIME espressione. Accetta un argomento, che è l'ora da cui vuoi estrarre l'ora.

Esempio:

SELECT HOUR('03:45:30');

Risultato:

+------------------+
| HOUR('03:45:30') |
+------------------+
|                3 |
+------------------+

Per i valori dell'ora, restituisce l'ora come numero nell'intervallo 0 a 23 . Tuttavia, l'intervallo di TIME i valori possono essere molto più grandi e, pertanto, il valore restituito può essere molto più alto di 23 . In particolare, TIME i valori possono essere compresi nell'intervallo '-838:59:59.999999' a '838:59:59.999999' .

Ecco un esempio con una parte oraria più grande:

SELECT HOUR('838:45:30');

Risultato:

+-------------------+
| HOUR('838:45:30') |
+-------------------+
|               838 |
+-------------------+

Se l'ora non rientra nell'intervallo accettato per TIME valori, il valore restituito è 838 con un avvertimento.

TIME i valori possono anche essere negativi. In questi casi, HOUR() restituisce un valore positivo.

Il EXTRACT() Funzione

Il EXTRACT() la funzione consente di estrarre un'unità specificata dal valore di data/ora. Pertanto, puoi usarlo per estrarre l'ora (così come altre unità) dal valore dell'ora.

Esempio:

SELECT EXTRACT(HOUR FROM '10:47:01');

Risultato:

+-------------------------------+
| EXTRACT(HOUR FROM '10:47:01') |
+-------------------------------+
|                            10 |
+-------------------------------+

Il TIME_FORMAT() Funzione

Il TIME_FORMAT() La funzione consente di formattare un valore di tempo in base a una stringa di formato. La stringa di formato specifica come deve essere formattata l'ora.

È quindi possibile utilizzare questa funzione per restituire l'ora (oltre a minuti e secondi) dall'ora. Ci sono varie opzioni per restituire l'ora.

Ecco un esempio che restituisce l'ora in varie forme:

SELECT 
    TIME_FORMAT('18:45:30', '%H') AS '%H',
    TIME_FORMAT('18:45:30', '%h') AS '%h',
    TIME_FORMAT('18:45:30', '%I') AS '%I',
    TIME_FORMAT('18:45:30', '%k') AS '%k',
    TIME_FORMAT('18:45:30', '%l') AS '%l';

Risultato:

+------+------+------+------+------+
| %H   | %h   | %I   | %k   | %l   |
+------+------+------+------+------+
| 18   | 06   | 06   | 18   | 6    |
+------+------+------+------+------+

Ecco una descrizione di ciascuno di questi identificatori di formato:

Specificatore di formato Descrizione
%H Ora con 2 cifre tra 00-23.
%h Ora con 2 cifre tra 01-12.
%I Ora con 2 cifre tra 01-12.
%k Ora con 1 cifra compresa tra 0 e 23.
%l Ora con 1 cifra tra 1-12.

Il TIME_FORMAT() la funzione accetta un sottoinsieme delle stringhe di formato che possono essere utilizzate con DATE_FORMAT() funzione. Consulta le stringhe di formato MariaDB per un elenco completo di stringhe di formato/specificatori che possono essere utilizzati con DATE_FORMAT() . Il TIME_FORMAT() la funzione accetta solo identificatori di formato per ore, minuti e secondi. Qualsiasi altro identificatore di formato restituisce null o 0 in fase di restituzione.

Il DATE_FORMAT() Funzione

Il DATE_FORMAT() La funzione consente di formattare un valore di data o data e ora in base a una stringa di formato. La stringa di formato specifica come formattare la data/ora.

Possiamo quindi usare gli stessi identificatori di formato che abbiamo usato con TIME_FORMAT() funzione nell'esempio precedente. Tuttavia, DATE_FORMAT() non accetta un TIME valore, quindi dovremo passare un DATETIME valore.

SELECT 
    DATE_FORMAT('2023-01-01 18:45:30', '%H') AS '%H',
    DATE_FORMAT('2023-01-01 18:45:30', '%h') AS '%h',
    DATE_FORMAT('2023-01-01 18:45:30', '%I') AS '%I',
    DATE_FORMAT('2023-01-01 18:45:30', '%k') AS '%k',
    DATE_FORMAT('2023-01-01 18:45:30', '%l') AS '%l';

Risultato:

+------+------+------+------+------+
| %H   | %h   | %I   | %k   | %l   |
+------+------+------+------+------+
| 18   | 06   | 06   | 18   | 6    |
+------+------+------+------+------+

Passando solo un TIME value non lo taglia del tutto con questa funzione:

SELECT 
    DATE_FORMAT('18:45:30', '%H') AS '%H',
    DATE_FORMAT('18:45:30', '%h') AS '%h',
    DATE_FORMAT('18:45:30', '%I') AS '%I',
    DATE_FORMAT('18:45:30', '%k') AS '%k',
    DATE_FORMAT('18:45:30', '%l') AS '%l';

Risultato:

+------+------+------+------+------+
| %H   | %h   | %I   | %k   | %l   |
+------+------+------+------+------+
| NULL | NULL | NULL | NULL | NULL |
+------+------+------+------+------+
1 row in set, 5 warnings (0.000 sec)

Mostra gli avvisi:

SHOW WARNINGS;

Risultato:

+---------+------+--------------------------------------+
| Level   | Code | Message                              |
+---------+------+--------------------------------------+
| Warning | 1292 | Incorrect datetime value: '18:45:30' |
| Warning | 1292 | Incorrect datetime value: '18:45:30' |
| Warning | 1292 | Incorrect datetime value: '18:45:30' |
| Warning | 1292 | Incorrect datetime value: '18:45:30' |
| Warning | 1292 | Incorrect datetime value: '18:45:30' |
+---------+------+--------------------------------------+