Dans MySQL, vous pouvez utiliser le SUBTIME()
fonction pour soustraire une valeur d'heure d'une expression d'heure ou de date/heure.
La façon dont cela fonctionne est que vous fournissez deux arguments; le premier est une valeur d'heure ou de date/heure et le second est une valeur d'heure. Le SUBTIME()
La fonction soustrait alors le deuxième argument du premier et renvoie le résultat.
Syntaxe
La syntaxe ressemble à ceci :
SUBTIME(expr1,expr2)
Où expr1
peut être une expression d'heure ou de date et d'heure, et expr2
est une expression temporelle.
Et donc expr2
est soustrait de expr1
.
Exemple 1 - Utilisation de base
Voici un exemple pour illustrer.
SELECT SUBTIME('12:35:00', '1:30');
Résultat :
+-----------------------------+ | SUBTIME('12:35:00', '1:30') | +-----------------------------+ | 11:05:00 | +-----------------------------+
Exemple 2 – Soustraction de secondes
Dans cet exemple, je soustrais également un nombre de secondes de la valeur de temps.
SELECT SUBTIME('12:35:00', '1:30:30');
Résultat :
+--------------------------------+ | SUBTIME('12:35:00', '1:30:30') | +--------------------------------+ | 11:04:30 | +--------------------------------+
Et nous obtenons le même résultat même si nous omettons la partie secondes de l'argument de temps initial.
SELECT SUBTIME('12:35', '1:30:30');
Résultat :
+-----------------------------+ | SUBTIME('12:35', '1:30:30') | +-----------------------------+ | 11:04:30 | +-----------------------------+
Exemple 3 – Fraction de seconde
Vous pouvez également soustraire la fraction de seconde.
SELECT SUBTIME('12:35:00.888888', '1:30:30.555555');
Résultat :
+----------------------------------------------+ | SUBTIME('12:35:00.888888', '1:30:30.555555') | +----------------------------------------------+ | 11:04:30.333333 | +----------------------------------------------+
Exemple 4 - Résultats négatifs
Il est tout à fait valable de se retrouver avec une valeur négative pour votre résultat.
SELECT SUBTIME('12:35:00', '20:30:30');
Résultat :
+---------------------------------+ | SUBTIME('12:35:00', '20:30:30') | +---------------------------------+ | -07:55:30 | +---------------------------------+
Exemple 5 - Soustraire d'une valeur datetime
Dans cet exemple, je soustrais d'une valeur datetime (par opposition à une simple valeur temporelle comme dans les exemples précédents).
SELECT SUBTIME('2021-01-01 12:35:00', '1:30:30');
Résultat :
+-------------------------------------------+ | SUBTIME('2021-01-01 12:35:00', '1:30:30') | +-------------------------------------------+ | 2021-01-01 11:04:30 | +-------------------------------------------+
Dans ce cas, la partie date était inchangée, car le deuxième argument n'était pas assez grand pour l'affecter.
Dans cet exemple suivant, j'augmente le deuxième argument afin qu'il soit suffisamment grand pour affecter la partie date.
SELECT SUBTIME('2021-01-01 12:35:00', '100:30:30');
Résultat :
+---------------------------------------------+ | SUBTIME('2021-01-01 12:35:00', '100:30:30') | +---------------------------------------------+ | 2020-12-28 08:04:30 | +---------------------------------------------+
Comme on le voit dans cet exemple, les valeurs de temps ne sont pas limitées à moins de 24 heures (elles peuvent aller de -838:59:59 à 838:59:59 .
Cependant, vous pouvez également faire des choses comme ceci :
SELECT SUBTIME('2021-01-01 12:35:00', '4 4:30:30');
Résultat :
+---------------------------------------------+ | SUBTIME('2021-01-01 12:35:00', '4 4:30:30') | +---------------------------------------------+ | 2020-12-28 08:04:30 | +---------------------------------------------+
Exemple 6 – Limitations de la valeur de temps
Comme mentionné, le type de données temporelles peut aller de -838:59:59 à 838:59:59 . Cela signifie que vous ne pouvez pas soustraire plus que cela. Cela signifie également que le résultat ne peut pas être en dehors de cette plage. Par exemple, vous ne pouvez pas faire ceci :
SELECT SUBTIME('12:35:00', '20000000:30:30');
Résultat :
+---------------------------------------+ | SUBTIME('12:35:00', '20000000:30:30') | +---------------------------------------+ | -826:24:59 | +---------------------------------------+ 1 row in set, 1 warning (0.01 sec)
Le résultat est complètement faux et MySQL affiche un avertissement.
Mais ce n'est pas seulement le deuxième argument auquel vous devez faire attention. Vous rencontrerez également le même problème si le premier argument est initialement une valeur négative :
SELECT SUBTIME('-800:35:00', '50:30:30');
Résultat :
+-----------------------------------+ | SUBTIME('-800:35:00', '50:30:30') | +-----------------------------------+ | -838:59:59 | +-----------------------------------+ 1 row in set, 1 warning (0.00 sec)