You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle数据库中修改列指定位置二进制位的方法求助

在Oracle中重置二进制指定位置的位

步骤1:明确位位置的权重

你的例子中原二进制为11110(十进制30),重置第2位后得到10110(十进制22),这里的位计数是从左数第2位,对应权重为 2^(总位数 - 位位置)。此例中总位数是5,所以权重为2^(5-2)=8。

步骤2:二进制字符串转十进制

先将原二进制字符串转为十进制数,方便进行位运算:

SELECT TO_NUMBER('11110', 'BIN') AS original_dec FROM DUAL;
-- 返回结果:30

步骤3:位运算重置指定位置

使用位运算生成掩码,确保无论原位是0还是1,都能将其置0。通用写法如下:

SELECT 
    BITAND(
        TO_NUMBER('11110', 'BIN'),
        (POWER(2, LENGTH('11110')) - 1) ^ POWER(2, LENGTH('11110') - 2)
    ) AS modified_dec
FROM DUAL;
-- 返回结果:22

其中(POWER(2,总位数)-1)生成与原二进制长度一致的全1掩码,再通过异或^将目标位转为0,最后用BITAND和原数运算完成置0操作。

步骤4:转换为指定格式(带单引号分隔)

将处理后的十进制数转回二进制字符串,再用正则替换拆分出带单引号的格式:

SELECT 
    REGEXP_REPLACE(
        TO_CHAR(
            BITAND(
                TO_NUMBER('11110', 'BIN'),
                (POWER(2, LENGTH('11110')) - 1) ^ POWER(2, LENGTH('11110') - 2)
            ),
            'FM0' || LENGTH('11110') || 'B'
        ),
        '(.)',
        '''\1'''
    ) AS final_result
FROM DUAL;

执行后直接返回你需要的格式:'1' '0' '1' '1' '0'


内容的提问来源于stack exchange,提问作者ANCHAL BHASIN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 19:57:16