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

Lưu trữ nhiều giá trị bit trong một cột bảng duy nhất

Bạn có thể lưu trữ dữ liệu này dưới dạng một trường bit và sau đó sử dụng các toán tử logic boolean để truy xuất các giá trị

ví dụ:

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]

Sau đó cho các lựa chọn:

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

Để tìm tất cả các ngày chứa cờ thứ ba (thứ ba là bit thứ 2 hoặc 2 ^ 1 hoặc 2)

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

hoặc

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

Lưu ý, mẫu trong trường hợp thứ hai sẽ hoạt động đối với bất kỳ bit nào - đó là đối với thứ sáu (bit thứ 5 hoặc 2 ^ 4 hoặc 16) sẽ là

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

Cuối cùng, trường hợp chung ... chuyển vào một số (1 cho thứ hai) bạn nhận được

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

Điều này có vẻ như rất nhiều việc đối với tôi, khi bạn chỉ có thể lưu nó dưới dạng 5 (hoặc 7 trường bit) nhưng đó là cách bạn có thể làm điều đó.

Để biết thêm ví dụ, hãy xem ý chính mà tôi đã viết cho một câu hỏi khác:

https://gist.github.com/1846338

và câu trả lời:

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. Lỗi CTE:Các loại không khớp giữa phần neo và phần đệ quy

  2. SqlParameter không cho phép Tên bảng - các tùy chọn khác mà không có cuộc tấn công tiêm sql?

  3. Truyền mảng tới một thủ tục được lưu trữ trên máy chủ SQL

  4. SQL Server - Điều gì xảy ra khi một hàng trong bảng được cập nhật?

  5. Bảng lịch cho Kho dữ liệu