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

标签 sql sql-server tsql

我想知道是否有一种简短的方法(无需对整个过程进行编程)来确定 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。
logaritmpower 的倒数,以 2 为底数获得对数,诀窍是“除以底数”。 FLOOR 反过来提供了最重要的位。

关于sql - 如何确定按位值中的最大位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12466568/

相关文章:

sql - 指定两个排序索引?

sql-server - 帮助从 SSRS 2008 中的不同数据库服务器中提取数据

sql - 选择 varchar 列的最小日期

sql - 如何通过避免在所有表中重复出现的某些列来从 SQL Server 2008 中的多个表中选择列名

sql - 此 Sql Server 查询中的 CTE 语法有什么问题?

sql - 将日期截断为仅小时/分钟

sql - 同时执行更新时出现死锁

java - LPX-00607 用于 ora :contains in java but not sqlplus

sql - MS Access 2007 SQL 查询问题

mysql - jOOQ 为嵌套选择生成的 SQL 在 MySQL/MariaDB 中不起作用