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
相关产品推荐
相关产品推荐

