Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

TSQL Untuk Filter Pengalaman Dari Jangkauan multipilih

Pertama, Anda memerlukan tabel checkRanges

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)

Lihat bagaimana checkID adalah kekuatan 2?

Di aplikasi Anda jika pengguna memilih 3-6 dan 9-12 Anda mengirim 2+8 = 10 ke db Anda. Juga akan lebih bagus jika Anda membuat kotak centang menggunakan info db.

Di db Anda, Anda melakukan perbandingan bitwise untuk memilih rentang yang tepat. Kemudian lakukan antara dengan setiap rentang.

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

Lihat semuanya bersama-sama Demo SQL Fiddle Saya menyertakan lebih banyak pengguna. Anda hanya perlu mengubah klausul where checkID & 10 > 0 untuk menguji kombinasi lainnya.

CATATAN:
Saya memperbarui rentang. Ubah nilai atas menjadi value - 1 karena between inklusif dan dapat memberikan hasil duplikat.

Jika ingin menggunakan versi lama Anda harus mengganti betwewen dalam kalimat gabung ke

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. Tanggal/waktu catatan MSSQL hapus otomatis

  2. Apa artinya varchar (-1)?

  3. Bagaimana cara menerapkan 3 nilai untuk 1 baris ke 3 baris dengan masing-masing nilai?

  4. ID Terakhir Dimasukkan MS SQL Server

  5. Cari semua tabel, semua kolom untuk nilai tertentu SQL Server