【发布时间】:2021-05-12 14:57:09
【问题描述】:
我处于这种情况,我无法验证打印权限的位。不幸的是,我不能有一个点亮的位掩码。你能给我一些建议吗?
SELECT
DECODE(BITAND(00000000100000100000000000000001, 1), 1, '1', '0') AS READ,
DECODE(BITAND(00000000100000100000000000000001, 131072), 131072, '1', '0') AS COPY,
DECODE(BITAND(00000000100000100000000000000001, 8388608), 8388608, '1', '0') AS PRINT
FROM
DUAL
结果如下
R C P
- - -
1 1 0
你能给我一些建议吗?
【问题讨论】:
-
00000000100000100000000000000001 是一个十进制数,100000100000000000000001 转换为二进制时恰好将第 1 位和第 18 位设置为 1,第 24 位设置为零。因此,如果您想使用
bitand,您需要将您的“二进制”值转换为实数,正如第一个参数所期望的那样。那么......该值来自哪里,它是什么数据类型 - 一个零填充字符串?如果它是一个字符串,并且您正在寻找一个位,那么使用substr()将其拉出会更简单。