sql >> Databasteknik >  >> RDS >> Mysql

Olaglig blandning av sorteringar för drift för datum/tid jämförelse

  1. Som förklaras i den manuella posten för DATE_ADD() :

    I ditt fall eftersom table1.tim är en TIME värde, returnerar funktionen en sträng.

    Strängen returneras i teckenuppsättningen och sorteringen som ges av code>character_set_connection och collation_connection .

  2. Som förklaras i den manuella posten för TIME () :

    Strängen returneras som en binär sträng (varför kan jag inte använda anslutningsteckenuppsättningen och sortering går inte för mig – kanske en bugg?).

  3. Som förklaras i den manuella posten för Typkonvertering i uttrycksutvärdering :

    Därför är jämförelsen som görs en strängjämförelse, men den binära sträng kan inte tvingas till en lämplig sammanställning för jämförelse (eftersom dess kodning inte är känd). Därav felet du bevittnar.

Man skulle kunna tvinga jämförelsen att genomföras korrekt genom att uttryckligen casta en eller båda operanderna, men jag skulle bli frestad att bara omarbeta klausulen så att konverteringen sker implicit från jämförelse med en TIME typ:

TIME(table1.dt1 - INTERVAL 1 MINUTE) <= table1.tim



  1. FGCB_ADD_REMOVE-spärren

  2. Hur man listar databaser och tabeller i PostgreSQL

  3. Laravel :Hur tar man de sista n (valfritt antal) rader efter att de har beställts i stigande ordning?

  4. MySQL Installer har fastnat när tjänsten startas