2009-07-10 40 views
16

Tôi có một trường int bitmasked trong cơ sở dữ liệu của mình. Thông thường tôi quản lý nó thông qua C# mã, nhưng bây giờ tôi cần phải lật một chút trong mặt nạ sử dụng T-SQLThao tác bit-lật trong T-SQL

Làm thế nào để thực hiện những điều sau:

Bit Tôi muốn lật: 1 < < 8 (256)

Mặt nạ trị trước khi tôi lật: 143

giá trị mặt nạ sau khi tôi lật: 399

Điều này có thể được thực hiện mà không có các toán tử bit bị thiếu trong T-SQL, đúng không?

Trả lời

25

Sử dụng XOR:

SELECT value^256 

Vì vậy, trong trường hợp của bạn, SELECT 143^256 sẽ thực sự trở lại 399. Nếu bạn muốn vượt qua trong số mũ cũng như:

SELECT value^POWER(2, power) 
+0

cảm ơn! Nó giải quyết vấn đề của tôi! Có cách nào để bật bit một cách thanh lịch không? (Tôi đã làm nó, nhưng nó trông xấu xí ...) –

+2

Bạn đang tìm cách lật hoặc bật? Lật - sử dụng XOR (^); bật - sử dụng OR (|). Nếu bạn muốn sang trọng hơn, bọc trong một chức năng được xác định bởi người dùng có tên. :) –

20

khai thác TSQL Bitwise thể được tìm thấy here và bài viết hay về cách sử dụng chúng là here

+1

Câu hỏi là về thay đổi bit, các bài viết bạn đăng không có gì để làm với điều đó – Edwin

+3

Câu hỏi là về bit-FLIPPING, không phải về chuyển bit. –

+0

Tiêu đề là sai về chuyển bit, nhưng câu hỏi thực tế về bit lật. – DaveBoltman