sql >> Database teknologi >  >> RDS >> Mysql

MySQL vælg DATETIME svarende til op til minuttet

Dette MySql-udtryk vil give dig DATETIME-værdier tilbage med sekunderne nulstillet.

CONVERT(DATE_FORMAT(table.column,'%Y-%m-%d-%H:%i:00'),DATETIME)

Tag et kig på dette. https://dev .mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format . Så du kan ende med en forespørgsel som denne:

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... 

Men vær forsigtig. Autogenererede tidsstempler er lidt ligesom flydende kommatal; når to af dem dukker op lige med hinanden, er det bare held. At afkorte dine tidsstempler til minutter kan være OK, men du kan også være bedre stillet ved at trække et tidsstempel fra et andet og sammenligne forskellene (eller de absolutte værdier af forskellene).

Denne join vil også være langsom, fordi den skal køre den anden trunkeringsfunktion på hver værdi, så den kan ikke bruge nogen indekser.

Du kan trække et tidsstempel fra et andet med TIMESTAMPDIFF() . Men vær forsigtig. Denne funktion fungerer kun korrekt på niveauet sekunder for tidsstempler inden for et par dage efter hinanden; det flyder nådeløst over (som jeg opdagede med stor smerte).

Du kan prøve at afkorte tidsstemplerne til minutter på det tidspunkt, du indsætter dem. Det ville lade dig indeksere dem.



  1. Vigtigheden af ​​transaktionslog i SQL Server

  2. Adgang til data fra servlet

  3. Alt du bør vide om SQL Server JOINS

  4. Fejl (1093):Du kan ikke opdatere måltabellen til opdatering i FROM-klausulen