2011-08-23 41 views
11

Với SQL, tôi muốn phát hiện xem một bit nhất định có thuộc kiểu cột số nguyên (MySQL) không?SQL - Kiểu số nguyên - Phát hiện bit

Tôi sẽ làm như thế nào?

Về cơ bản, tôi muốn phát hiện xem có đang bật bit hay không, sau đó bỏ qua.

Tôi đang sử dụng một cái gì đó như thế này bây giờ:

WHERE (column & 2) != 2 
+0

bạn có nói về một cột bit hoặc cột số nguyên? Ý bạn là gì? Vui lòng lặp lại câu hỏi. – Caimen

+0

Bạn đang sử dụng cơ sở dữ liệu nào? – Bohemian

+0

Cờ bitwise là tốt cho enums trong 3GLs nhưng một 4GL như SQL hoạt động tốt nhất với dữ liệu quan hệ tức là quan hệ của bộ dữ liệu với các thuộc tính. – onedaywhen

Trả lời

13

Giả sử bạn đang kiểm tra cho bit thứ 3 sau đó ...

SELECT bits & 8 = 8 FROM table; 

Điều này trả về giá trị nhị phân (trong trường hợp thứ ba) cho mỗi hàng trong cột 'bit'.

sử dụng 2^x cho bit xth thay vì 8.

ví dụ, để kiểm tra các bit thứ 5 chúng ta sẽ sử dụng 2^5 = 32

SELECT bits & 32 = 32 FROM table; 

Tuy nhiên, đây là cách không cần thiết phức tạp. Đơn giản chỉ cần sử dụng giá trị boolean trong một số cột và nó sẽ làm cho mọi thứ dễ dàng hơn nhiều.

+0

Chính xác là gì SELECT bit & 8 = 8 FROM bảng; đang làm? Chúng tôi đang chọn bit & 8 = 8 cho một cột? – RoR

+0

Ý tưởng cơ bản là toán tử '&' xác định các bit được 'bật' trong cả hai đối số của nó. Vì vậy, (bit & 8 = 8) xác định nếu 8 (chỉ là bit thứ ba) và cột 'bit' có bit tương ứng. Kết quả của truy vấn nói chung là một chuỗi các kết quả nhị phân nếu bit thứ ba được bật. – PyKing

2

SQL hỗ trợ các nhà khai thác chút tiêu chuẩn:

DECLARE @BitMask INT 
SET @BitMask = 34 

SELECT 
    @BitMask & 32, -- Returns 32, ON 
    @BitMask & 16 -- Returns 0, OFF 
0

Bạn nên gắn thẻ các câu hỏi dành cho các nền tảng cơ sở dữ liệu mà bạn đang sử dụng.

Nếu đây là SQL Server 2008, bạn có thể sử dụng toán tử Bitwise (đặc biệt Bitwise hoặc tương đương) để so sánh với một số nguyên mà bit được thiết lập để mô hình bạn đang quan tâm đến việc kiểm tra cho: http://msdn.microsoft.com/en-us/library/cc627409.aspx

Lưu ý rằng bằng cách đóng gói số nguyên theo cách này, bạn có thể ngăn việc sử dụng bất kỳ chỉ mục nào trên các cột đó.

0

Tôi tin rằng điều này sẽ giúp bạn đạt được những gì bạn muốn:

SQL bit manipulation

0

Trong TSQL, 1 = true, 0 = false.
Trong MS Access, -1 = true, 0 = false.
...
Có thể ai đó có thể điền vào các phương ngữ khác.

Nếu bạn đang giải thích một chút trong một lớp ứng dụng, bạn sẽ có thể sử dụng một chức năng chuyển đổi (ví dụ, trong vb bạn có thể nói IF convert.toboolean(myValue) THEN... để giải thích đúng hay sai.

1

Đối với mysql, bạn có thể sử dụng các bit-wise AND hành & với một chút mặt nạ

Ví dụ, để có được một boolean true nếu bit 2 (tính từ 0) được thiết lập cho column1, sử dụng này:

where (column1 & 4) = 4 

này sẽ làm việc cho nhiều kiểm tra bit, ví dụ để kiểm tra xem cả hai bit 0 và 2 được thiết lập:

where (column1 & 5) = 5 
Các vấn đề liên quan