Database 如何在sql中查看存储的字符ascii值

Database 如何在sql中查看存储的字符ascii值,database,oracle,Database,Oracle,我试图查看内存中存储的字符ASCII值,但它只显示第一个字符ASCII。我想完成存储在内存中的字符结构 前冒名char10 我要通过abc考试 因此,它应该显示int数组,如下所示 67 68 69 32 32 32 此处32 for Space一种方法是转储字符串,然后从输出中获取字节码列表: SELECT SUBSTR(REGEXP_SUBSTR(DUMP('a b c d'), ':.*'), 3) FROM DUAL; 在你的情况下,你会想做 SELECT SUBSTR(REGEXP_

我试图查看内存中存储的字符ASCII值,但它只显示第一个字符ASCII。我想完成存储在内存中的字符结构 前冒名char10 我要通过abc考试 因此,它应该显示int数组,如下所示 67 68 69 32 32 32

此处32 for Space

一种方法是转储字符串,然后从输出中获取字节码列表:

SELECT SUBSTR(REGEXP_SUBSTR(DUMP('a b c d'), ':.*'), 3) FROM DUAL;
在你的情况下,你会想做

SELECT SUBSTR(REGEXP_SUBSTR(DUMP(YOUR_COLUMN_NAME), ':.*'), 3)
  FROM YOUR_TABLE

祝您好运。

如果您只想查看存储的字节,请使用dump,如果您愿意,dump将以十进制、十六进制甚至八进制显示。Bob从输出中提取字节的方法很有用,如果这很重要,您可以选择用空格替换逗号

如果确实想查看十六进制值,还可以执行以下操作:

select name,
  cast(utl_raw.cast_to_raw(name) as varchar2(20)) as ascii
from your_table;

NAME       ASCII                         
---------- ------------------------------
abc        61626320202020202020          
作为获取十进制值的替代方法,您可以使用分层查询:

select name,
  listagg(ascii(substr(name, level, 1)), ' ') within group (order by level) as ascii
from your_table
connect by level <= length(name)
group by name;

NAME       ASCII                         
---------- ------------------------------
abc        97 98 99 32 32 32 32 32 32 32 

它不是真正的ASCII,除非您的字符集是US7ASCII;它是数据库字符集中的十进制表示形式。。。但这种区别通常被忽视。不过,对于非ASCII字符,这些值都将大于127。

欢迎使用StackOverflow。请编辑您的问题,以显示您正在使用的实际sql语句和您得到的结果。谢谢
select name,
  dump(name) as dumped,
  trim(regexp_replace(dump(name), '((.*:)|,)', ' ')) as ascii
from your_table;

NAME       DUMPED                                        ASCII                         
---------- --------------------------------------------- ------------------------------
abc        Typ=96 Len=10: 97,98,99,32,32,32,32,32,32,32  97 98 99 32 32 32 32 32 32 32