如何将字节字符串转换为Oracle中的数字?

问题描述 投票:4回答:4

我想将像'1001'这样的字节字符串转换为整数值9,Oracle中是否有标准函数?

顺便说一下,我在http://www.orafaq.com/wiki/Binary上找到了一个自定义解决方案

string oracle byte
4个回答
1
投票

AFAIK在Oracle中没有内置的功能,尽管你可以使用你在帖子中链接提供的解决方案


3
投票

我在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
投票

有关Tom Kyte的库,请参阅here进行这些类型转换。

在这种情况下,你有:

select to_dec('1001', 2) from dual;

1
投票

“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 Demo

© www.soinside.com 2019 - 2024. All rights reserved.