MariaDB ha diverse funzioni che consentono di estrarre varie parti di data e ora da valori di data/ora. Puoi utilizzarli per separare ogni componente di data/ora nella propria colonna, se necessario.
Di seguito sono riportati quattro modi per estrarre ore, minuti e secondi da un valore temporale in MariaDB. Come bonus, includeremo anche i microsecondi.
Il HOUR()
, MINUTE()
, SECOND()
e MICROSECOND()
Funzioni
Il HOUR()
, MINUTE()
e SECOND()
le funzioni estraggono rispettivamente le ore, i minuti ei secondi da un valore di data o data e ora.
E se stai lavorando con una precisione maggiore, puoi usare il MICROSECOND()
funzione per restituire la parte dei microsecondi.
Ecco un esempio di utilizzo di queste funzioni per restituire ogni componente temporale nella propria colonna:
SELECT
HOUR('10:45:30.123456') AS "Hours",
MINUTE('10:45:30.123456') AS "Minutes",
SECOND('10:45:30.123456') AS "Seconds",
MICROSECOND('10:45:30.123456') AS "Microseconds";
Risultato:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 45 | 30 | 123456 | +-------+---------+---------+--------------+
TIME
i valori possono essere compresi nell'intervallo '-838:59:59.999999'
a '838:59:59.999999'
.
TIME
i valori possono anche essere negativi. In questi casi, i valori restituiti sono ancora positivi.
Ecco un valore temporale negativo:
SELECT
HOUR('-10:45:30.123456') AS "Hours",
MINUTE('-10:45:30.123456') AS "Minutes",
SECOND('-10:45:30.123456') AS "Seconds",
MICROSECOND('-10:45:30.123456') AS "Microseconds";
Risultato:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 45 | 30 | 123456 | +-------+---------+---------+--------------+
Il EXTRACT()
Funzione
Il EXTRACT()
la funzione consente di estrarre un'unità specificata dal valore di data/ora. Pertanto, puoi usarlo per estrarre ore, minuti, secondi e microsecondi dal valore del tempo.
Esempio:
SELECT
EXTRACT(HOUR FROM '10:45:30.123456') AS "Hours",
EXTRACT(MINUTE FROM '10:45:30.123456') AS "Minutes",
EXTRACT(SECOND FROM '10:45:30.123456') AS "Seconds",
EXTRACT(MICROSECOND FROM '10:45:30.123456') AS "Microseconds";
Risultato:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 45 | 30 | 123456 | +-------+---------+---------+--------------+
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 separatamente le varie fasce orarie.
Esempio:
SELECT
TIME_FORMAT('10:07:30.123456', '%H') AS "Hours",
TIME_FORMAT('10:07:30.123456', '%i') AS "Minutes",
TIME_FORMAT('10:07:30.123456', '%s') AS "Seconds",
TIME_FORMAT('10:07:30.123456', '%f') AS "Microseconds";
Risultato:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 07 | 30 | 123456 | +-------+---------+---------+--------------+
È anche possibile restituire tutte le componenti temporali separatamente, ma nella stessa colonna.
Ecco un esempio di cosa intendo:
SELECT TIME_FORMAT('10:07:30.123456', '%H %i %s %f');
Risultato:
+-----------------------------------------------+ | TIME_FORMAT('10:07:30.123456', '%H %i %s %f') | +-----------------------------------------------+ | 10 07 30 123456 | +-----------------------------------------------+
Il TIME_FORMAT()
la funzione accetta un sottoinsieme delle stringhe di formato che possono essere utilizzate con DATE_FORMAT()
funzione.
Esistono diversi possibili identificatori di formato per la parte dell'ora. L'identificatore di formato utilizzato sopra restituisce l'ora con due cifre comprese tra 00
e 23
. Vedi 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/secondi secondari. 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 10:07:30.123456', '%H') AS "Hours",
DATE_FORMAT('2023-01-01 10:07:30.123456', '%i') AS "Minutes",
DATE_FORMAT('2023-01-01 10:07:30.123456', '%s') AS "Seconds",
DATE_FORMAT('2023-01-01 10:07:30.123456', '%f') AS "Microseconds";
Risultato:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | 10 | 07 | 30 | 123456 | +-------+---------+---------+--------------+
Passando solo un TIME
value non funziona con questa funzione:
SELECT
DATE_FORMAT('10:07:30.123456', '%H') AS "Hours",
DATE_FORMAT('10:07:30.123456', '%i') AS "Minutes",
DATE_FORMAT('10:07:30.123456', '%s') AS "Seconds",
DATE_FORMAT('10:07:30.123456', '%f') AS "Microseconds";
Risultato:
+-------+---------+---------+--------------+ | Hours | Minutes | Seconds | Microseconds | +-------+---------+---------+--------------+ | NULL | NULL | NULL | NULL | +-------+---------+---------+--------------+ 1 row in set, 4 warnings (0.003 sec)
Vediamo l'avviso:
SHOW WARNINGS;
Risultato:
+---------+------+---------------------------------------------+ | Level | Code | Message | +---------+------+---------------------------------------------+ | Warning | 1292 | Incorrect datetime value: '10:07:30.123456' | | Warning | 1292 | Incorrect datetime value: '10:07:30.123456' | | Warning | 1292 | Incorrect datetime value: '10:07:30.123456' | | Warning | 1292 | Incorrect datetime value: '10:07:30.123456' | +---------+------+---------------------------------------------+