我在甲骨文中使用Asciistr方法,它应该将给定的结构转换为ascii。阿拉伯字符转换正确,但英语仍然一样,而在一些在线转换器,我可以看到,数字,如1和2转换成0031和0032。以下是我的方法:
create or replace procedure replace_ascii(test_var in varchar2,valueRet out varchar2) is
begin
select replace (asciistr(test_var), '\', null)
into valueRet
from dual;
end replace_ascii;我目前正在用它们的期望值来代替数字:
select replace(replace (valueRet,'1','0031'),'2','0032')
....
into valueRet
from dual; 但是我不想用“替换”20次来返回正确的值。转换这些字符的最佳方法是什么?
1-> 0031
2-> 0032
A-> 0041
.
我是不是漏掉了什么?PLease检查此链接http://r12a.github.io/apps/conversion/并尝试转换英文数字和字母,并检查最后一个标签的结果。
发布于 2016-10-14 11:34:42
据我所知,您希望将任何字符串转换为4位元组的结果。我觉得你的功能应该像
CREATE OR REPLACE FUNCTION to_ascii(str_a VARCHAR2) RETURN VARCHAR2 IS
l_str VARCHAR2(32767);
l_res VARCHAR2(32767);
i NUMBER := 0;
l_char VARCHAR2(1 CHAR);
BEGIN
l_str := asciistr(str_a);
WHILE i < length(l_str)
LOOP
i := i + 1;
l_char := substr(l_str, i, 1);
/*l_res := l_res || '\';*/
IF l_char = '\' THEN
l_res := l_res || substr(l_str, i + 1, 4);
i := i + 4;
ELSE
l_res := l_res || ltrim(to_char(ascii(l_char), '00XX'));
END IF;
END LOOP;
RETURN l_res;
END;发布于 2016-10-14 10:40:02
select case when length(asciistr(test_var)) = 1 then to_char(ascii(test_var)) else to_char(asciistr(test_var)) end as value
from dual;尝尝这个。
https://stackoverflow.com/questions/40040560
复制相似问题