SET類型在定義的時候是一組值的集合,像這樣
SET(value1,value2,value3,...)
他有點像枚舉(ENUM)類型,但有別與枚舉(ENUM)的是 枚舉(ENUM)是一個單選集合,SET類型是一個多選集合
我們知道SET類型集合的索引是從1開始依次為 1,2,4,8,...,最大可以有64個值,可以看出這個數列分別對應的是2n,n從0開始
有趣的是 這個索引(數列),任意一組索引的和都是唯一的
所以可以用一個唯一整數來確定到底選中了哪幾個值。
比如 1 + 2 + 4 = 7
就表示 value1,value2,value3被選中了
假如我們用 1表示選中,0表示不選中
那么value1,value2,value3 都選中就是 111
如果選中value1,value2,value4的話就是1101,那么value 1 2 4 的索引的和是1 + 2 + 8 = 11
111 和 7 = 20 + 21 + 22
1101 和 11 = 20 + 21 + 0+23
索引的值 = 2n
單純覺得有趣,僅此而已。
Tips
在sqlserver的開發中,常自己拼接一組值來指定一個多選屬性
比如會定義一個葯品的管理方式,以前的做法是用1234567890abcdef...
來定義不同的類型,然后拼接成字符串存放在后台,在查詢的時候會用到charindex來判斷是否滿足條件,其實也可以做的像mysql set類型一樣靈活