Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Prima il valore massimo del problema T-SQL BETWEEN

Come la documentazione dice:

Non dice nulla sullo scambio di start_expression e end_expression per abbinare i valori minimo e massimo. Dovresti aspettarti il ​​risultato come documentato, non come credi dovrebbe.

Per i curiosi là fuori, lo standard ANSI SQL99 specifica che il predicato BETWEEN dovrebbe includere una clausola per il confronto SIMMETRICO o ASIMMETRICO. Solo quello SIMMETRICO può scambiare start_range e end_range, quello ASIMMETRICO deve essere rigoroso. La forma ASIMMETRICA è la forma implicita. In altre parole un'implementazione che interpreta A BETWEEN X and Y come (A>=X AND A<=Y) OR (A>=Y AND A<=X) , come suggerisce l'OP, non è conforme agli standard.