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

MySQL seleciona DATETIME semelhante até o minuto


Essa expressão MySql retornará valores DATETIME com os segundos zerados.
CONVERT(DATE_FORMAT(table.column,'%Y-%m-%d-%H:%i:00'),DATETIME)

Dê uma olhada neste. https://dev .mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format . Então você pode acabar com uma consulta como esta:
SELECT Table1.TimeSTamp1, Table1.Param1, Table2.TimeStamp2, Table2.Param2 
    FROM Table1
    JOIN Table2 ON  CONVERT(DATE_FORMAT(Table1.TimeStamp1,'%Y-%m-%d-%H:%i:00'),DATETIME)
                 =  CONVERT(DATE_FORMAT(Table2.TimeStamp2,'%Y-%m-%d-%H:%i:00'),DATETIME)
    WHERE ... conditions for the other parameters of Table1 and Table2... 

Mas tenha cuidado. Os carimbos de data e hora gerados automaticamente são como números de ponto flutuante; quando dois deles aparecem iguais um ao outro é apenas sorte. Truncar seus timestamps para o minuto pode ser bom, mas também pode ser melhor subtrair um timestamp de outro e comparar as diferenças (ou os valores absolutos das diferenças).

Além disso, essa junção será lenta porque precisa executar a função de segundo truncamento em cada valor, portanto, não pode usar nenhum índice.

Você pode subtrair um timestamp de outro com TIMESTAMPDIFF() . Mas tenha cuidado. Esta função só funciona corretamente no nível de segundos para timestamps com poucos dias de intervalo; transborda sem graça (como descobri com grande dor).

Você pode tentar truncar os carimbos de data/hora para minutos no momento em que os insere. Isso permitiria que você os indexasse.