Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

T-SQL BETWEEN problème valeur maximale en premier

Comme la documentation dit :

Ne dit rien sur l'échange de start_expression et end_expression pour faire correspondre les valeurs min et max. Vous devez vous attendre au résultat tel que documenté, et non à ce que vous pensez qu'il devrait.

Pour les curieux, la norme ANSI SQL99 spécifie que le prédicat BETWEEN doit inclure une clause pour la comparaison SYMMETRIC ou ASYMMETRIC. Seul le SYMMETRIC est autorisé à échanger les start_range et end_range, le ASYMETRIC doit être strict. La forme ASYMETRIQUE est la forme implicite. Autrement dit une implémentation qui interprète A BETWEEN X and Y comme (A>=X AND A<=Y) OR (A>=Y AND A<=X) , comme le suggère le PO, n'est pas conforme à la norme.