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

Membandingkan dua bitmask dalam SQL untuk melihat apakah ada bit yang cocok

Jawaban atas pertanyaan Anda adalah dengan menggunakan & Bitwise seperti ini:

SELECT * FROM UserTable WHERE Roles & 6 != 0

6 dapat ditukar dengan kombinasi bitfield Anda di mana Anda ingin memeriksa bahwa setiap pengguna memiliki satu atau lebih bit tersebut. Ketika mencoba untuk memvalidasi ini, saya biasanya merasa terbantu untuk menulis ini dengan tulisan tangan dalam biner. Tabel pengguna Anda terlihat seperti ini:

        1   2   4
------------------
Dave    0   1   1
Charlie 0   1   0
Susan   0   0   1   
Nick    1   0   0

Tes Anda (6) adalah ini

        1   2   4
------------------
Test    0   1   1

Jika kita melewati setiap orang melakukan bitwaise Dan melawan tes kita mendapatkan ini:

        1   2   4
------------------
Dave    0   1   1   
Test    0   1   1
Result  0   1   1 (6)

Charlie 0   1   0
Test    0   1   1
Result  0   1   0 (2)

Susan   0   0   1
Test    0   1   1
Result  0   0   1 (4)

Nick    1   0   0
Test    0   1   1
Result  0   0   0 (0) 

Di atas harus menunjukkan bahwa catatan apa pun yang hasilnya bukan nol memiliki satu atau lebih tanda yang diminta.

Sunting:Ini kasus uji jika Anda ingin memeriksanya

with test (id, username, roles)
AS
(
    SELECT 1,'Dave',6
    UNION SELECT 2,'Charlie',2
    UNION SELECT 3,'Susan',4
    UNION SELECT 4,'Nick',1
)
select * from test where (roles & 6) != 0  // returns dave, charlie & susan

atau

select * from test where (roles & 2) != 0 // returns Dave & Charlie

atau

select * from test where (roles & 7) != 0 // returns dave, charlie, susan & nick


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengapa pernyataan penghapusan SQL tunggal akan menyebabkan kebuntuan?

  2. Fungsi SQL group_concat di SQL Server

  3. Cara menggunakan Operator Logika APAPUN / BEBERAPA di SQL Server - Tutorial SQL Server / TSQL Bagian 127

  4. Cara mendapatkan catatan terakhir per grup dalam SQL

  5. Memahami fungsi PIVOT di T-SQL