首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在甲骨文中转换为ascii

在甲骨文中转换为ascii
EN

Stack Overflow用户
提问于 2016-10-14 10:10:21
回答 2查看 4.1K关注 0票数 0

我在甲骨文中使用Asciistr方法,它应该将给定的结构转换为ascii。阿拉伯字符转换正确,但英语仍然一样,而在一些在线转换器,我可以看到,数字,如1和2转换成0031和0032。以下是我的方法:

代码语言:javascript
运行
复制
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;

我目前正在用它们的期望值来代替数字:

代码语言:javascript
运行
复制
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/并尝试转换英文数字和字母,并检查最后一个标签的结果。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-14 11:34:42

据我所知,您希望将任何字符串转换为4位元组的结果。我觉得你的功能应该像

代码语言:javascript
运行
复制
 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;
票数 1
EN

Stack Overflow用户

发布于 2016-10-14 10:40:02

代码语言:javascript
运行
复制
   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;

尝尝这个。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40040560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档