如何确定按位值中的最大位

321*_*21X 2 sql t-sql sql-server

我想知道在T-SQL中确定二进制值中的最大数字是否有一个简短的方法(没有编程整个事情).

在列中,我1 = sunday, 2 = monday, .. 7 = saturday按位存储选择的日期().

我的翻译台:

-- day of week
-- 1 == 1       -> POWER(2,0) -> sunday
-- 2 == 2       -> POWER(2,1) -> monday
-- 3 == 4       -> POWER(2,2)
-- 4 == 8       -> POWER(2,3)
-- 5 == 16      -> POWER(2,4)
-- 6 == 32      -> POWER(2,5)
-- 7 == 64      -> POWER(2,6) -> saturday
Run Code Online (Sandbox Code Playgroud)

所以如果我选择FOR EXAMPLE sunday和saturday我的二进制值是65.

我如何与选择T-SQL65将是7


编辑

让我们说我有两个列的两个记录:

 ID   | SelectedDays 
------|--------------
 1    | 65
 2    | 3
Run Code Online (Sandbox Code Playgroud)

因此,ID 1将返回7,因为这将是被选中的星期六,ID 2并将返回星期一.

Lui*_*uot 6

 SELECT FLOOR(LOG(bit_week)/LOG(2))+1
Run Code Online (Sandbox Code Playgroud)

根据日期返回1到7.
logaritmpower基数2中的obtanin logaritm 相反,诀窍是"除以基数".反过来,FLOOR提供了最有意义的位.