Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

T-SQL BETWEEN problem max value first

Als Dokumentation sagt:

Sagt nichts über das Vertauschen von start_expression und end_expression aus, um mit den minimalen und maximalen Werten übereinzustimmen. Sie sollten das Ergebnis wie dokumentiert erwarten, nicht wie Sie glauben, dass es sollte.

Für die Neugierigen da draußen gibt der ANSI SQL99-Standard an, dass das BETWEEN-Prädikat eine Klausel für den SYMMETRIC- oder ASYMMETRIC-Vergleich enthalten sollte. Nur der SYMMETRIC darf start_range und end_range vertauschen, der ASYMMETRIC muss streng sein. Die ASYMMETRISCHE Form ist die implizite Form. Mit anderen Worten eine Implementierung, die A BETWEEN X and Y interpretiert als (A>=X AND A<=Y) OR (A>=Y AND A<=X) , wie das OP vorschlägt, ist nicht standardkonform.