sql >> Databasteknik >  >> RDS >> Mysql

MySQL väljer DATETIME liknande upp till minuten

Detta MySql-uttryck ger dig tillbaka DATETIME-värden med sekunderna nollställda.

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

Titta på det här. https://dev .mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format . Så du kan få en fråga som denna:

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 var försiktig. Autogenererade tidsstämplar är ungefär som flyttal; när två av dem dyker upp lika med varandra är det bara tur. Att trunkera dina tidsstämplar till minuten kan vara OK, men du kan också vara bättre att subtrahera en tidsstämpel från en annan och jämföra skillnaderna (eller de absoluta värdena för skillnaderna).

Dessutom kommer denna join att vara långsam eftersom den måste köra den andra trunkeringsfunktionen på varje värde, så den kan inte använda några index.

Du kan subtrahera en tidsstämpel från en annan med TIMESTAMPDIFF() . Men var försiktig. Denna funktion fungerar bara korrekt på nivån sekunder för tidsstämplar inom några dagar efter varandra; det svämmar över nådlöst (som jag upptäckte med stor smärta).

Du kan prova att avkorta tidsstämplarna till minuter när du infogar dem. Det skulle låta dig indexera dem.



  1. Stöds TransactionScope-objektet fullt ut med MySqlConnector för .NET?

  2. ASP, MySQL och UTF-8

  3. Förstå effekterna av hög latens i High Availability MySQL- och MariaDB-lösningar

  4. Kan jag generera Squeryl-dataobjekt automatiskt för att spegla ett befintligt MySql-schema?