Как преобразовать байтовую строку в число в Oracle? - PullRequest
4 голосов
/ 15 июня 2011

Я хочу преобразовать байтовую строку, такую ​​как '1001', в целочисленное значение 9, есть ли стандартная функция для этого в Oracle?

Кстати, я нашел собственное решение на http://www.orafaq.com/wiki/Binary

Ответы [ 4 ]

4 голосов
/ 17 января 2018

Я пытался это сделать на Oracle, используя CONNECT BY для преобразования двоичного числа в десятичное с помощью простого оператора SELECT. Наконец, получили желаемый результат, используя приведенный ниже код.

WITH INPUT AS
(SELECT REVERSE('&N') AS X FROM DUAL)
SELECT SUM(TO_NUMBER(SUBSTR(X,LEVEL,1)*POWER(2,LEVEL-1))) AS OUTPUT
FROM INPUT CONNECT BY LEVEL<=LENGTH(X);
1 голос
/ 08 апреля 2018

"Есть ли стандартная функция для этого в Oracle?"

Существует BIN_TO_NUM , который преобразует битовый вектор в его эквивалентное число.

SET SERVEROUTPUT ON;
DECLARE
  i VARCHAR2(100) := '1001';
  o INT;
BEGIN
  i:= TRIM(BOTH ',' FROM REPLACE(REPLACE(i, '1', '1,'),'0','0,')); 
  EXECUTE IMMEDIATE 'SELECT BIN_TO_NUM('|| i || ') FROM dual' INTO o;
  DBMS_OUTPUT.put_line(i || ' => ' || o);
END;
/

Результат:

1,0,0,1 => 9

Демонстрация DBFiddle

1 голос
/ 15 июня 2011

См. здесь для библиотеки от Тома Кайта для выполнения этих преобразований типов.

В этом случае у вас будет:

select to_dec('1001', 2) from dual;
1 голос
/ 15 июня 2011

AFAIK, для этого в Oracle нет встроенной функции, хотя вы можете использовать решение, предоставленное по ссылке в вашем посте

...