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

Ulovlig blanding af sorteringer til drift til sammenligning af dato/klokkeslæt

  1. Som forklaret i den manuelle post for DATE_ADD() :

    I dit tilfælde, fordi table1.tim er en TIME værdi, returnerer funktionen en streng.

    Strengen returneres i tegnsættet og sorteringen givet af code>character_set_connection og collation_connection .

  2. Som forklaret i den manuelle post for TIME () :

    Strengen returneres som en binær streng (hvorfor bruger man ikke forbindelsestegnsættet, og det er umuligt at sortere - måske en fejl?).

  3. Som forklaret i den manuelle indgang til Typekonvertering i udtryksevaluering :

    Derfor er den udførte sammenligning en strengsammenligning, men den binære streng kan ikke tvinges til en passende sammenstilling til sammenligning (da dens kodning ikke er kendt). Derfor fejlen du er vidne til.

Man kunne tvinge sammenligningen til at blive udført korrekt ved eksplicit casting en eller begge operander, men jeg ville være fristet til bare at omarbejde klausulen, så konverteringen finder sted implicit fra sammenligning med en TIME type:

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



  1. Nogle ENHVER Aggregerede Transformationer er ødelagte

  2. SQL Server Failover Cluster Installation -1

  3. MySQL spring de første 10 resultater over

  4. MAX funktion i where klausul mysql