sql – 可以执行按位组功能吗?

前端之家收集整理的这篇文章主要介绍了sql – 可以执行按位组功能吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在一个表中包含按位标志的字段.假设为例,有三个标志:4 =>读,2 =>写,1 =>执行和表看起来像这样*:
user_id  |  file  |  permissions
-----------+--------+---------------
        1  |  a.txt |  6    ( <-- 6 = 4 + 2 = read + write)
        1  |  b.txt |  4    ( <-- 4 = 4 = read)
        2  |  a.txt |  4
        2  |  c.exe |  1    ( <-- 1 = execute)

我有兴趣在任何记录上找到具有特定标志位(例如:写入)的所有用户.为了在一个查询中做到这一点,我认为如果你把所有的用户权限在一起,你会得到一个单一的值,这是他们的权限的“总和”:

user_id  |  all_perms
-----------+-------------
        1  |  6        (<-- 6 | 4 = 6)
        2  |  5        (<-- 4 | 1 = 5)

*我的实际表与文件文件权限无关,这只是一个例子

有一种方法可以在一个语句中执行此操作吗?我看到它的方式,它与GROUP BY的正常聚合函数非常相似:

SELECT user_id,SUM(permissions) as all_perms
FROM permissions
GROUP BY user_id

…但显然,一些神奇的“按位或”功能而不是SUM.任何人都知道这样的事情?

(和奖励积分,它在oracle工作吗?)

解决方法

MysqL的:
SELECT user_id,BIT_OR(permissions) as all_perms
FROM permissions
GROUP BY user_id

猜你在找的MsSQL相关文章