为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8
【操作系统】:麒麟
【CPU】:
【问题描述】*:怎么把二进制字符串转换成十进制数,类似mysql的CONV(num, 2, 10)
自定义一个函数吧。
bin_to_num参数可能要在达梦最新版本才支持,另外书写参数也麻烦。
CREATE OR REPLACE FUNCTION binary_to_num (pbin VARCHAR2)
RETURN BIGINT DETERMINISTIC
IS
v_len INT := LENGTH (pbin);
v_num BIGINT := 0;
BEGIN
FOR i IN 1..v_len LOOP
IF SUBSTR(pbin, i, 1) = '1' THEN
v_num := v_num + POWER(2, v_len - i);
END IF;
END LOOP;
RETURN v_num;
END binary_to_num;
/
试着写了个进制间转换的小函数,你测试下,看看是否与mysql里的conv函数功能接近
--测试脚本
SELECT F_CONV('101011010110010100110100010',2,10) AS BIN2DEC
,F_CONV('90909090',10,16) AS DEC2HEX
,F_CONV('56B29A2',16,8) AS HEX2OCT
,F_CONV('532624642',8,2) AS OCT2BIN
,F_CONV('56B29A2',16,93) AS HEX2B93
,F_CONV('1K1_9',93,6) AS B932B6
,F_CONV('13004255230',6,36) AS B62B36
,F_CONV('1I4HWI',36,10) AS B362DEC
;
--输出结果
BIN2DEC 90909090
DEC2HEX 56B29A2
HEX2OCT 532624642
OCT2BIN 101011010110010100110100010
HEX2B93 1K1_9
B932B6 13004255230
B62B36 1I4HWI
B362DEC 90909090
DM中提供BIN_TO_NUM函数,可以将二进制转换成十进制数。示例如下:
SELECT BIN_TO_NUM(1, 1, 0, 1,1,0,1) FROM DUAL;