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

4 modi per separare ore, minuti e secondi da un valore temporale in MariaDB

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