Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Exemplos de SUBTIME() – MySQL


No MySQL, você pode usar o SUBTIME() função para subtrair um valor de hora de uma expressão de hora ou data e hora.

A maneira como funciona é que você fornece dois argumentos; o primeiro é um valor de hora ou data e hora e o segundo é um valor de hora. O SUBTIME() A função então subtrai o segundo argumento do primeiro e retorna o resultado.


Sintaxe


A sintaxe fica assim:
SUBTIME(expr1,expr2)

Onde expr1 pode ser uma expressão de hora ou data e hora e expr2 é uma expressão de tempo.

E assim expr2 é subtraído de expr1 .

Exemplo 1 – Uso básico


Aqui está um exemplo para demonstrar.
SELECT SUBTIME('12:35:00', '1:30');

Resultado:
+-----------------------------+
| SUBTIME('12:35:00', '1:30') |
+-----------------------------+
| 11:05:00                    |
+-----------------------------+

Exemplo 2 – Subtraindo segundos


Neste exemplo, também subtraio um número de segundos do valor de tempo.
SELECT SUBTIME('12:35:00', '1:30:30');

Resultado:
+--------------------------------+
| SUBTIME('12:35:00', '1:30:30') |
+--------------------------------+
| 11:04:30                       |
+--------------------------------+

E obtemos o mesmo resultado mesmo se omitirmos a parte dos segundos do argumento de tempo inicial.
SELECT SUBTIME('12:35', '1:30:30');

Resultado:
+-----------------------------+
| SUBTIME('12:35', '1:30:30') |
+-----------------------------+
| 11:04:30                    |
+-----------------------------+

Exemplo 3 – Segundos fracionários


Você também pode subtrair a parte dos segundos fracionários.
SELECT SUBTIME('12:35:00.888888', '1:30:30.555555');

Resultado:
+----------------------------------------------+
| SUBTIME('12:35:00.888888', '1:30:30.555555') |
+----------------------------------------------+
| 11:04:30.333333                              |
+----------------------------------------------+

Exemplo 4 – Resultados negativos


É bastante válido acabar com um valor negativo para o seu resultado.
SELECT SUBTIME('12:35:00', '20:30:30');

Resultado:
+---------------------------------+
| SUBTIME('12:35:00', '20:30:30') |
+---------------------------------+
| -07:55:30                       |
+---------------------------------+

Exemplo 5 - Subtrair de um valor de data e hora


Neste exemplo, subtraio de um valor de data e hora (em oposição a apenas um valor de hora, como nos exemplos 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                       |
+-------------------------------------------+

Nesse caso, a parte da data não foi alterada, pois o segundo argumento não era grande o suficiente para afetá-la.

Neste próximo exemplo, eu aumento o segundo argumento para que seja grande o suficiente para afetar a parte da data.
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 visto neste exemplo, os valores de tempo não estão restritos a menos de 24 horas (eles podem variar de -838:59:59 para 838:59:59 .

No entanto, você também pode fazer coisas assim:
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                         |
+---------------------------------------------+

Exemplo 6 – Limitações do valor do tempo


Conforme mencionado, o tipo de dados de tempo pode variar de -838:59:59 para 838:59:59 . Isso significa que você não pode subtrair mais do que isso. Isso também significa que o resultado não pode estar fora desse intervalo. Por exemplo, você não pode fazer isso:
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)

O resultado está completamente errado e o MySQL exibe um aviso.

Mas não é apenas o segundo argumento que você precisa ter cuidado. Você também encontrará o mesmo problema se o primeiro argumento for inicialmente um 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)