Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

TSQL cho thử nghiệm lọc từ phạm vi đa lựa chọn

Trước tiên, bạn cần kiểm tra bảng

CREATE TABLE checkRanges
    ([checkID] int, [name] varchar(8), [low] int, [upper] int);

INSERT INTO checkRanges
    ([checkID], [name], [low], [upper])
VALUES
    (1, '0-3', 0, 2),
    (2, '3-6', 3, 5),
    (4, '6-9', 6, 8),
    (8, '9-12', 9, 11),
    (16, '12+', 12, 999)

Xem cách checkID là lũy thừa của 2?

Trong ứng dụng của bạn nếu người dùng chọn 3-69-12 bạn gửi 2+8 = 10 cho db của bạn. Cũng sẽ rất tuyệt nếu bạn tạo hộp kiểm của mình bằng cách sử dụng thông tin db.

Trong db của bạn, bạn thực hiện so sánh bitwise để chọn các phạm vi phù hợp. Sau đó, điều chỉnh giữa các phạm vi.

WITH ranges as (
    SELECT *
    FROM checkRanges
    where checkID & 10 > 0
)
SELECT *
FROM users u
inner join ranges r
   on u.Experience between r.low and r.upper

Cùng nhau xem tất cả SQL Fiddle Demo Tôi bao gồm nhiều người dùng hơn. Bạn chỉ phải thay đổi clausule where checkID & 10 > 0 để kiểm tra sự kết hợp khác.

LƯU Ý:
Tôi cập nhật các phạm vi. Thay đổi giá trị trên thành giá trị value - 1 bởi vì between là bao gồm và có thể cho kết quả trùng lặp.

Nếu muốn sử dụng phiên bản cũ, bạn phải thay thế betwewen trong câu nối thành

u.Experience >= r.low and u.Experience *<* r.upper



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Khóa bi quan trong T-SQL

  2. SQL Server:Khôi phục mà không có BẮT ĐẦU GIAO DỊCH

  3. Cập nhật một bảng dựa trên dữ liệu từ nhiều bảng SQL Server 2005,2008

  4. Làm thế nào để chuyển đổi giữa các múi giờ trong SQL Server 2008?

  5. SQL Server là gì? (Định nghĩa, Phiên bản, Phiên bản)