2009-10-15 24 views
5

SQL Server'da bir sorguda v1 ve v2 sırasına göre bir fark var mı?sql: V1 VE v2 ARASINDA

SELECT * 
    FROM table 
WHERE col BETWEEN v1 AND v2 

Şu anda v1 v2'den büyükse herhangi bir sonuç alamıyorum.

col >= v1 AND col <= v2 

için bu sadece sözdizimsel şeker mi, yoksa gerçekten ikisi arasında tüm değerleri sürer? Şu anki gözlemlerimde, sanırım ilk dava.

cevap

11

SQL Server 2008:

select 1 
where 5 between 1 and 7 

1 sonuç

select 1 
where 5 between 7 and 1 

0 sonuç bu sonuçlara dayanarak

ve Postgre Docs ben ANSI Standardı aşağıdaki gibidir varsayımında ediyorum (her ne kadar Bu dokümanı bulamıyorum).

a between x and y 
== 
a >= x AND a <= y 

GÜNCELLEME:

SQL-92 Spec diyor (tırnak):

"X BETWEEN Y AND Z" is equivalent to "X>=Y AND X<=Z" 
+0

Ve "7 ile 1 arasında 7'yi seçin" seçeneğini işaretleyin - harika! –

+0

Örnekler, MySQL –

+0

içinde sözdizimsel olarak geçerli değil (bunları çalıştırmak için dual'den eklemek zorundasınız) –

11

Evet! BETWEEN yüklemi maddesindeki argümanların sırası. Ve evet, bu AND-ed karşılaştırma formu için çoğunlukla (çoğunlukla) sözdizimsel şeker.

"çoğunlukla", yukarıda mantıksal olarak eşdeğer ederken, iki ifadeleri (muhtemelen geçmişte ...) bazı SQL sunucuları üzerinde belirgin bir sorgu planını alabilirsiniz gerçeğinden kaynaklanır. Günümüzde çoğu sunucunun, bu tür bir filtrenin, formundan bağımsız olarak, optimal bir şekilde işlenmesini sağladığına dair güvenli bir tahmin olduğunu tahmin ediyoruz.

3

Evet, haklısınız, sadece bahsettiğiniz yapı için sözdizimsel şeker.