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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top