T-SQL 透過 XOR / AND 運算式做複合式判斷 1, 2, 4, 8, 16 列舉值

若想用一個數值表示多個條件是否成立,這些複合條件設計一個列舉 ,
每個條件對應一個 2 的幕次方,如:1, 2, 4, 8, 16...

舉例 
1 號條件值 = 1: 0001
2 號條件值 = 2: 0010
3 號條件值 = 4: 0100
4 號條件值 = 8: 1000

有個變數 A 包含 1 號條件與 3 號條件 ,用 XOR 運算變數 A 等於 5
0001
0100
------
0101

比對 變數 A 是否有包含 3 號條件,用 AND 運算會得到 4,與 3 號條件的值相同,表示成立
0101
0100
------
0100

比對 變數 A 是否有包含 數值 2,用 AND 運算會得到 0,與 2 號條件的值不同,表示不成立
0101
0010
------
0000


以 T-SQL 實作範例

/*Enums */
DECLARE @Gold int = 1, @Silver int = 2, @Pearl int = 4, @Diamond int = 8;
DECLARE @MyGift int;

/*Add some */
SET @MyGift =  @Gold | @Diamond;

/*Check if I have */
select 'I have Gold', IIF(@Gold & @MyGift = @Gold, 'Yes', 'No')
union all
select 'I have Silver', IIF(@Silver & @MyGift = @Silver, 'Yes', 'No')
union all
select 'I have Pearl', IIF(@Pearl & @MyGift = @Pearl, 'Yes', 'No')
union all
select 'I have Diamond', IIF(@Diamond & @MyGift = @Diamond, 'Yes', 'No')


Popular posts from this blog

Google Map 多點路線規劃

解決瀏覽器無法下載檔案

Oppo R9 Turn on/off developer mode