utl_raw.bit_and добавляет дополнительные 0 после и операции в оракуле SQL - PullRequest
0 голосов
/ 07 декабря 2018

Для заданного двоичного числа, скажем, длиной более 128, я хочу проверить, включен ли конкретный бит (скажем, 30-й бит). Я использую функцию utl_raw.bit_and для выполнения между двумя двоичными числами.Я ожидаю, что входное двоичное число будет длиннее 128, и тогда я не могу использовать функцию oracle bitand.Когда я делаю bit_and, я вижу дополнительный 0, добавленный к результату.Я не уверен, как он туда попал, когда длина обоих входов одинакова.Вот мой пример sql

SELECT 
    A, 
    LENGTH(A) LENGTH_A, 
    B, 
    LENGTH(B) LENGTH_B, 
    UTL_RAW.BIT_AND(TRIM(A),TRIM(B)) AND_AB, 
    LENGTH(UTL_RAW.BIT_AND(TRIM(A), TRIM(B))) LENGTH_AND_AB 
FROM (
    SELECT 
        TRIM(RPAD('0', LENGTH('1111111111111100000000000000011') - 30    ,'0')) || '1' ||TRIM(RPAD('0', 29, '0')) A,  
    '1111111111111100000000000000011' B FROM DUAL);

Это результат операции

A                                 LENGTH_A  B                               LENGTH_B  AND_AB                           LENGTH_AND_B
0100000000000000000000000000000   31        1111111111111100000000000000011 31        00100000000000000000000000000000 32
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...