加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 16:39:56 所属栏目:MsSql教程 来源:网络整理
导读:我在一个表中包含按位标志的字段.假设为例,有三个标志: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.
我在一个表中包含按位标志的字段.假设为例,有三个标志: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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读