SQL: entre V1 e V2
-
21-09-2019 - |
Pergunta
Existe uma diferença na ordem de V1 e V2 em uma consulta entre o SQL Server?
SELECT *
FROM table
WHERE col BETWEEN v1 AND v2
Atualmente, não recebo resultados se V1 for maior que V2. Isso é apenas açúcar sintático para
col >= v1 AND col <= v2
Ou realmente leva todos os valores entre os dois? Nas minhas observações atuais, acho que é o primeiro caso.
Solução
SQL Server 2008:
select 1
where 5 between 1 and 7
1 resultado
select 1
where 5 between 7 and 1
0 resultados
Com base nesses resultados e no Docs pós -gere Eu levantaria a hipótese de que o padrão ANSI é o seguinte (embora eu não consiga encontrar esse documento).
a between x and y
==
a >= x AND a <= y
ATUALIZAR:
A especificação SQL-92 diz (citação):
"X BETWEEN Y AND Z" is equivalent to "X>=Y AND X<=Z"
Outras dicas
Sim! A ordem dos argumentos no assunto do predicado. E, sim, este é o açúcar sintático principalmente para a forma de comparação e ED.
O "principalmente", acima vem do fato de que enquanto logicamente equivalente, as duas expressões podem (provavelmente no passado ...) receber um plano de consulta distinto em alguns servidores SQL. É um palpite seguro que a maioria dos servidores, hoje em dia, fornece um manuseio ideal desse tipo de filtro, independentemente de sua forma.
Sim, você está certo, é apenas açúcar sintático para a construção que você mencionou.