Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Aula 04 - modelagem banco de dados - operação com coluna de data e hora

Como efetuar uma operação com data e hora? Considerando que uma coluna tenha data e hora com valor mínimo de 2018-04-28 14:55:00.000 e valor máximo de 2018-04-28 15:10:00.000, realizando o código abaixo deveria obter algo parecido com 0000-00-00 00:15.000, ou seja, 15 minutos:

select ((max(DateAndTime))-(min(DateAndTime))) from table1;

No entanto, o valor retornado é 5500.000. O que representa esse número? Como deveria prosseguir para retirar da tabela a duração do evento sobre a coluna DateAndTime?

3 respostas
solução!

Olá Lucas,

se você tenta fazer uma subtração de datas no sql com o operador - o que acontece é que o banco vai pegar o texto, tirar todos os caracteres que não são numéricos e com os números que sobraram faz a conta. Então no seu exemplo que seria 2018-04-28 15:10:00.000 - 2018-04-28 14:55:00.000 ele está fazendo 20180428151000.000 - 20180428145500.000, por isso do 5500.000.

Para fazer na verdade uma diferença de tempo, você precisa usar a função TIMEDIFF:

select TIMEDIFF( data1, data2 ) from tabela

Perfeito! Fiz o seguinte e tive exatamente a duração:

SELECT max(DateAndTime) FROM tabela INTO @tempomax;
SELECT min(DateAndTime) FROM tabela INTO @tempomin;
SELECT TIMEDIFF(@tempomax, @tempomin) FROM tabela LIMIT 1;

no entanto, se retiro o comando LIMIT, o resultado aparece em forma de coluna com várias linhas de mesmo valor. Sabe o por quê disso?

Como a sua tabela tem n registros, chuto que provavelmente ele mostrou n linhas também. É que como o from é em relação a tabela, ele repetiu a conta de timediff uma vez para cada registro, mesmo a conta sendo a mesma.