En MySQL, puede usar SUBTIME()
función para restar un valor de hora de una expresión de hora o fecha y hora.
La forma en que funciona es que proporciona dos argumentos; el primero es un valor de hora o fecha y hora, y el segundo es un valor de hora. El SUBTIME()
Luego, la función resta el segundo argumento del primero y devuelve el resultado.
Sintaxis
La sintaxis es así:
SUBTIME(expr1,expr2)
Donde expr1
puede ser una expresión de hora o de fecha y hora, y expr2
es una expresión de tiempo.
Y así expr2
se resta de expr1
.
Ejemplo 1:uso básico
Aquí hay un ejemplo para demostrarlo.
SELECT SUBTIME('12:35:00', '1:30');
Resultado:
+-----------------------------+ | SUBTIME('12:35:00', '1:30') | +-----------------------------+ | 11:05:00 | +-----------------------------+
Ejemplo 2:Restar segundos
En este ejemplo, también resto una cantidad de segundos del valor del tiempo.
SELECT SUBTIME('12:35:00', '1:30:30');
Resultado:
+--------------------------------+ | SUBTIME('12:35:00', '1:30:30') | +--------------------------------+ | 11:04:30 | +--------------------------------+
Y obtenemos el mismo resultado incluso si omitimos la parte de los segundos del argumento de tiempo inicial.
SELECT SUBTIME('12:35', '1:30:30');
Resultado:
+-----------------------------+ | SUBTIME('12:35', '1:30:30') | +-----------------------------+ | 11:04:30 | +-----------------------------+
Ejemplo 3:fracciones de segundo
También puedes restar la parte de los segundos fraccionarios.
SELECT SUBTIME('12:35:00.888888', '1:30:30.555555');
Resultado:
+----------------------------------------------+ | SUBTIME('12:35:00.888888', '1:30:30.555555') | +----------------------------------------------+ | 11:04:30.333333 | +----------------------------------------------+
Ejemplo 4:resultados negativos
Es bastante válido terminar con un valor negativo para su resultado.
SELECT SUBTIME('12:35:00', '20:30:30');
Resultado:
+---------------------------------+ | SUBTIME('12:35:00', '20:30:30') | +---------------------------------+ | -07:55:30 | +---------------------------------+
Ejemplo 5:Restar de un valor de fecha y hora
En este ejemplo resto de un valor de fecha y hora (a diferencia de solo un valor de hora como en los ejemplos anteriores).
SELECT SUBTIME('2021-01-01 12:35:00', '1:30:30');
Resultado:
+-------------------------------------------+ | SUBTIME('2021-01-01 12:35:00', '1:30:30') | +-------------------------------------------+ | 2021-01-01 11:04:30 | +-------------------------------------------+
En este caso, la parte de la fecha no cambió, ya que el segundo argumento no era lo suficientemente grande como para afectarlo.
En el siguiente ejemplo, aumento el segundo argumento para que sea lo suficientemente grande como para afectar la parte de la fecha.
SELECT SUBTIME('2021-01-01 12:35:00', '100:30:30');
Resultado:
+---------------------------------------------+ | SUBTIME('2021-01-01 12:35:00', '100:30:30') | +---------------------------------------------+ | 2020-12-28 08:04:30 | +---------------------------------------------+
Como se ve en este ejemplo, los valores de tiempo no están restringidos a menos de 24 horas (pueden variar desde -838:59:59 a 838:59:59 .
Sin embargo, también puedes hacer cosas como esta:
SELECT SUBTIME('2021-01-01 12:35:00', '4 4:30:30');
Resultado:
+---------------------------------------------+ | SUBTIME('2021-01-01 12:35:00', '4 4:30:30') | +---------------------------------------------+ | 2020-12-28 08:04:30 | +---------------------------------------------+
Ejemplo 6 – Limitaciones del valor del tiempo
Como se mencionó, el tipo de datos de tiempo puede oscilar entre -838:59:59 a 838:59:59 . Esto significa que no puedes restar más que eso. También significa que el resultado no puede estar fuera de este rango. Por ejemplo, no puedes hacer esto:
SELECT SUBTIME('12:35:00', '20000000:30:30');
Resultado:
+---------------------------------------+ | SUBTIME('12:35:00', '20000000:30:30') | +---------------------------------------+ | -826:24:59 | +---------------------------------------+ 1 row in set, 1 warning (0.01 sec)
El resultado es completamente incorrecto y MySQL muestra una advertencia.
Pero no es solo el segundo argumento del que debes tener cuidado. También se encontrará con el mismo problema si el primer argumento es inicialmente un valor negativo:
SELECT SUBTIME('-800:35:00', '50:30:30');
Resultado:
+-----------------------------------+ | SUBTIME('-800:35:00', '50:30:30') | +-----------------------------------+ | -838:59:59 | +-----------------------------------+ 1 row in set, 1 warning (0.00 sec)