sql >> Database >  >> RDS >> Mysql

MySQL selecteer DATETIME vergelijkbaar tot op de minuut

Deze MySql-expressie geeft je DATETIME-waarden terug met de seconden op nul.

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

Kijk hier eens even naar. https://dev .mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format . Dus je zou kunnen eindigen met een vraag als deze:

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

Maar pas op. Automatisch gegenereerde tijdstempels zijn een beetje zoals getallen met drijvende komma; wanneer twee van hen gelijk aan elkaar verschijnen, is het gewoon geluk. Het afkappen van uw tijdstempels tot op de minuut kan OK zijn, maar u kunt ook beter de ene tijdstempel van de andere aftrekken en de verschillen (of de absolute waarden van de verschillen) vergelijken.

Deze join zal ook traag zijn omdat het de tweede-afkortfunctie op elke waarde moet uitvoeren, dus het kan geen indexen gebruiken.

Je kunt de ene tijdstempel van de andere aftrekken met TIMESTAMPDIFF() . Maar pas op. Deze functie werkt alleen correct op het niveau van seconden voor tijdstempels binnen een paar dagen na elkaar; het stroomt gracieus over (zoals ik met veel pijn ontdekte).

U kunt proberen de tijdstempels in minuten in te korten op het moment dat u ze invoegt. Zo kun je ze indexeren.



  1. PLS-00103:Ontmoet het symbool CREATE

  2. Hoe een mysql-opgeslagen procedure aanroepen, met argumenten, vanaf de opdrachtregel?

  3. Wanneer TEKST in mysql gebruiken in plaats van VARCHAR

  4. Mysql naar mysqli converteren?