我想知道是否有一种简短的方法(无需对整个过程进行编程)来确定 T-SQL 中二进制值的最大数。
在一列中,我按位存储选择的日期(1 = 星期日,2 = 星期一,.. 7 = 星期六
)。
我的翻译表:
-- 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
因此,如果我选择例如星期日和星期六,我的二进制值为 65。
我如何使用 T-SQL
选择 65
将是 7
?
编辑
假设我有两条包含两列的记录:
ID | SelectedDays
------|--------------
1 | 65
2 | 3
因此,ID 1
将返回 7,因为这将是选定的星期六,而 ID 2
将返回星期一。
最佳答案
SELECT FLOOR(LOG(bit_week)/LOG(2))+1
根据日期返回 1 到 7。
logaritm
是 power
的倒数,以 2 为底数获得对数,诀窍是“除以底数”。 FLOOR 反过来提供了最重要的位。
关于sql - 如何确定按位值中的最大位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12466568/