2009-10-15 21 views
5

Có sự khác biệt nào trong thứ tự của v1 và v2 trong truy vấn GIỮA trên SQL Server không?sql: GIỮA v1 VÀ v2

SELECT * 
    FROM table 
WHERE col BETWEEN v1 AND v2 

hiện tại tôi không nhận được bất kỳ kết quả nào nếu v1 lớn hơn v2. Đây có phải là đường cú pháp duy nhất cho

col >= v1 AND col <= v2 

hoặc thực sự có tất cả các giá trị giữa hai? trên các quan sát hiện tại của tôi, tôi đoán đó là trường hợp đầu tiên.

Trả lời

11

SQL Server 2008:

select 1 
where 5 between 1 and 7 

1 kết quả

select 1 
where 5 between 7 and 1 

0 kết quả

Dựa trên những kết quả này, và Postgre Docs tôi sẽ đưa ra giả thuyết rằng các tiêu chuẩn ANSI là như sau (mặc dù Tôi không thể tìm thấy tài liệu đó).

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

UPDATE:

SQL-92 spec nói (trích dẫn):

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

Và xem "chọn 1 trong đó 7 từ 7 đến 1" - tuyệt vời! –

+0

các ví dụ không hợp lệ về cú pháp trong MySQL –

+0

(bạn phải chèn 'từ kép' để làm cho chúng hoạt động) –

11

Có! Thứ tự của các đối số trong vấn đề vị ngữ BETWEEN. Và, vâng, đây là đường [chủ yếu] cú pháp cho dạng so sánh AND-ed.

Các "chủ yếu", trên xuất phát từ thực tế rằng trong khi logic tương đương, hai biểu thức có thể (có thể là trong quá khứ ...) nhận được một kế hoạch truy vấn riêng biệt trên một số máy chủ SQL. Đó là một dự đoán an toàn mà hầu hết các máy chủ, hiện nay, cung cấp một xử lý tối ưu của loại bộ lọc này, bất kể hình thức của nó.

3

Có, bạn nói đúng, nó chỉ là cú pháp đường cho cấu trúc bạn đã đề cập.

Các vấn đề liên quan