MariaDB
 sql >> Base de données >  >> RDS >> MariaDB

4 façons de séparer les heures, les minutes et les secondes d'une valeur de temps dans MariaDB

MariaDB a plusieurs fonctions qui vous permettent d'extraire diverses parties de date et d'heure à partir de valeurs de date/heure. Vous pouvez les utiliser pour séparer chaque composant date/heure dans sa propre colonne si nécessaire.

Vous trouverez ci-dessous quatre façons d'extraire les heures, les minutes et les secondes d'une valeur de temps dans MariaDB. En prime, nous inclurons également les microsecondes.

Le HOUR() , MINUTE() , SECOND() et MICROSECOND() Fonctions

Le HOUR() , MINUTE() , et SECOND() extraient respectivement les heures, les minutes et les secondes d'une valeur date ou datetime.

Et si vous travaillez avec une plus grande précision, vous pouvez utiliser le MICROSECOND() fonction pour renvoyer la partie des microsecondes.

Voici un exemple d'utilisation de ces fonctions pour renvoyer chaque composant de temps dans sa propre colonne :

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";

Résultat :

+-------+---------+---------+--------------+
| Hours | Minutes | Seconds | Microseconds |
+-------+---------+---------+--------------+
|    10 |      45 |      30 |       123456 |
+-------+---------+---------+--------------+

TIME les valeurs peuvent être comprises dans la plage '-838:59:59.999999' à '838:59:59.999999' .

TIME les valeurs peuvent également être négatives. Dans de tels cas, les valeurs de retour sont toujours positives.

Voici une valeur de temps négative :

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";

Résultat :

+-------+---------+---------+--------------+
| Hours | Minutes | Seconds | Microseconds |
+-------+---------+---------+--------------+
|    10 |      45 |      30 |       123456 |
+-------+---------+---------+--------------+

Le EXTRACT() Fonction

Le EXTRACT() La fonction vous permet d'extraire une unité spécifiée de la valeur date/heure. Par conséquent, vous pouvez l'utiliser pour extraire les heures, les minutes, les secondes et les microsecondes de la valeur temporelle.

Exemple :

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";

Résultat :

+-------+---------+---------+--------------+
| Hours | Minutes | Seconds | Microseconds |
+-------+---------+---------+--------------+
|    10 |      45 |      30 |       123456 |
+-------+---------+---------+--------------+

Le TIME_FORMAT() Fonction

Le TIME_FORMAT() La fonction vous permet de formater une valeur de temps basée sur une chaîne de format. La chaîne de format spécifie comment l'heure doit être formatée.

Vous pouvez donc utiliser cette fonction pour retourner séparément les différentes tranches horaires.

Exemple :

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";

Résultat :

+-------+---------+---------+--------------+
| Hours | Minutes | Seconds | Microseconds |
+-------+---------+---------+--------------+
| 10    | 07      | 30      | 123456       |
+-------+---------+---------+--------------+

Il est également possible de renvoyer tous les composants de temps séparément, mais dans la même colonne.

Voici un exemple de ce que je veux dire :

SELECT TIME_FORMAT('10:07:30.123456', '%H %i %s %f');

Résultat :

+-----------------------------------------------+
| TIME_FORMAT('10:07:30.123456', '%H %i %s %f') |
+-----------------------------------------------+
| 10 07 30 123456                               |
+-----------------------------------------------+

Le TIME_FORMAT() la fonction accepte un sous-ensemble des chaînes de format qui peuvent être utilisées avec le DATE_FORMAT() une fonction.

Il existe plusieurs spécificateurs de format possibles pour la partie heure. Le spécificateur de format utilisé ci-dessus renvoie l'heure avec deux chiffres entre 00 et 23 . Voir Chaînes de format MariaDB pour une liste complète des chaînes/spécificateurs de format pouvant être utilisés avec DATE_FORMAT() . Le TIME_FORMAT() La fonction accepte uniquement les spécificateurs de format pour les heures, les minutes et les secondes/sous-secondes. Tout autre spécificateur de format donne null ou 0 être retourné.

Le DATE_FORMAT() Fonction

Le DATE_FORMAT() La fonction vous permet de formater une valeur date ou datetime en fonction d'une chaîne de format. La chaîne de format spécifie comment la date/heure doit être formatée.

Nous pouvons donc utiliser les mêmes spécificateurs de format que nous avons utilisés avec le TIME_FORMAT() fonction dans l'exemple précédent. Cependant, DATE_FORMAT() n'accepte pas un TIME valeur, nous devrons donc passer un DATETIME valeur.

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";

Résultat :

+-------+---------+---------+--------------+
| Hours | Minutes | Seconds | Microseconds |
+-------+---------+---------+--------------+
| 10    | 07      | 30      | 123456       |
+-------+---------+---------+--------------+

Passer juste un TIME la valeur ne fonctionne pas avec cette fonction :

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";

Résultat :

+-------+---------+---------+--------------+
| Hours | Minutes | Seconds | Microseconds |
+-------+---------+---------+--------------+
| NULL  | NULL    | NULL    | NULL         |
+-------+---------+---------+--------------+
1 row in set, 4 warnings (0.003 sec)

Voyons l'avertissement :

SHOW WARNINGS;

Résultat :

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