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

Simpan beberapa nilai bit dalam satu kolom tabel

Anda bisa menyimpan ini sebagai bitfield dan kemudian menggunakan operator logika boolean untuk mengambil nilai

misalnya:

CREATE TABLE [dbo].[testBF](
    [field1] [varchar](max) NOT NULL,
    [field2] [varchar](max) NOT NULL,
    [bitfield] [int] NOT NULL CONSTRAINT [DF_testBF_bitfield]  DEFAULT ((0))
) ON [PRIMARY]

Kemudian untuk pilihan:

SELECT field1, field2,
       CASE WHEN (bitfield & 1) = 1 THEN 'monday ' ELSE '' END + 
       CASE WHEN (bitfield & 2) = 2 THEN 'tuesday ' ELSE '' END +
       CASE WHEN (bitfield & 4) = 4 THEN 'wednesday ' ELSE '' END +
       CASE WHEN (bitfield & 8) = 8 THEN 'thursday ' ELSE '' END +
       CASE WHEN (bitfield & 16) = 16 THEN 'friday' ELSE '' END as [days of week]
FROM testBF

Untuk menemukan semua hari yang mengandung bendera selasa (selasa adalah bit ke-2 atau 2^1 atau 2)

SELECT * 
FROM aTable
WHERE (bitfield & 2) = 2

atau

SELECT * 
FROM aTable
WHERE (bitfield & 2) != 0

Perhatikan, templat dalam kasus kedua akan berfungsi untuk bit apa pun -- yaitu untuk hari Jumat (bit ke-5 atau 2^4 atau 16) adalah

SELECT * 
FROM aTable
WHERE (bitfield & 16) != 0

Akhirnya kasus umum... berikan nomor (1 untuk hari Senin) yang Anda dapatkan

SELECT * 
FROM aTable
WHERE (bitfield & POWER(2,@inNumOfWeekday-1)) != 0

Ini tampak seperti banyak pekerjaan bagi saya, ketika Anda bisa menyimpannya sebagai bidang 5 (atau 7 bit) tetapi begitulah cara Anda melakukannya.

Untuk lebih banyak contoh lihat inti yang saya tulis untuk pertanyaan lain:

https://gist.github.com/1846338

dan jawabannya:

https://stackoverflow.com/a/9302106/215752



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara tercepat untuk menghapus karakter non-numerik dari VARCHAR di SQL Server

  2. Bagaimana mengubah tipe data kolom dalam database SQL tanpa kehilangan data

  3. Sisipan Massal SQL Server – Bagian 1

  4. Kesalahan overflow aritmatika mengonversi ekspresi ke tipe data datetime. (sambil menampilkan tanggal waktu..)

  5. Cara Membuat Alias ​​​​Tipe Data Buatan Pengguna di SQL Server menggunakan T-SQL