Posts

Showing posts from March, 2019

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')