2009-10-15 54 views
5

在SQL Server上的BETWEEN查詢中,v1和v2的順序有差異嗎?sql:BETWEEN v1和v2

SELECT * 
    FROM table 
WHERE col BETWEEN v1 AND v2 

目前我沒有得到任何結果,如果v1比v2大。這只是語法糖

col >= v1 AND col <= v2 

還是它真的採取所有值之間的兩個?根據我目前的觀察,我想這是第一個案例。

回答

11

的SQL Server 2008:

select 1 
where 5 between 1 and 7 

1結果

select 1 
where 5 between 7 and 1 

0結果

基於這些結果,而Postgre Docs我會假設,ANSI標準如下(雖然我找不到那個文檔)。

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

UPDATE:

的SQL-92規範說(報價):

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

並簽出「選擇7在7和1之間7」 - 真棒! – 2009-10-15 14:50:56

+0

這些示例在MySQL – 2013-03-29 14:06:29

+0

(您必須插入'from dual'來使它們工作)在語法上不是有效的 – 2013-03-29 14:16:14

11

是的! BETWEEN謂詞中的參數順序。 而且,是的,這是[主要]用於AND-ed對比表的語法糖。

的「多數」,上述來自於一個事實,雖然邏輯上等同,兩人的表情可以(可能在過去...)獲得一定的SQL服務器上的獨立的查詢計劃。現在大多數服務器都可以提供這種類型的過濾器的最佳處理,無論其形式如何,這是一個安全的猜測。

3

是的,你是對的,它是否只是你提到的構造的語法糖。