Oracle 修改列中的不可见字符

Oracle 修改列中的不可见字符,oracle,character,regexp-replace,nls-sort,Oracle,Character,Regexp Replace,Nls Sort,我有一个字符串,它排列在一个没有空格和一些字符的字符串中,没有标点符号。最后一个字符串是6个字符“ABCDEF”,但长度是7。为什么? 它在甲骨文中 select regexp_replace((upper(utl_raw.cast_to_varchar2((nlssort(trim('a.Bc d-E/f'), 'nls_sort=binary_ai'))))), '[/:.,- ]|\d', '') as column_1 ,length(regexp_replace((upper(ut

我有一个字符串,它排列在一个没有空格和一些字符的字符串中,没有标点符号。最后一个字符串是6个字符“ABCDEF”,但长度是7。为什么? 它在甲骨文中

select 
 regexp_replace((upper(utl_raw.cast_to_varchar2((nlssort(trim('a.Bc d-E/f'), 'nls_sort=binary_ai'))))), '[/:.,- ]|\d', '') as column_1
,length(regexp_replace((upper(utl_raw.cast_to_varchar2((nlssort(trim('a.Bc d-E/f'), 'nls_sort=binary_ai'))))), '[/:.,- ]|\d', '')) as length_1
from dual

谢谢

看起来像utl_raw。cast_to_varchar2()将空终止符添加到长度()计数的字符串中:


在dump()调用中包装regexp_replace,以查看以十六进制输出的实际字符。我怀疑您在那里有一个在输出中不明显的空间。选择dump(regexp_replace((upper(utl_raw.cast_to_varchar2)((nlssort(trim('a.bcd-E/f'),'nls_sort=binary_ai')),'[/:,-]\d\p{Nd}\p{L}\p{p}\p}\s\w','')从双类型中选择dual-Typ=1 Len 7:65,66,67,69,70,0为什么有0?我怎么能只编辑6个字符呢?看起来是这样的。如何编辑空终止符的utl_raw.cast_to_varchar2()?通过调用substr()删除最后一个字符。首先,我会做一些搜索,以确保其他电话正在做你期望的事情。
SQL> select
    dump(utl_raw.cast_to_varchar2(nlssort('a.Bc d-E/f', 'nls_sort=binary_ai')
) as column_1
   from dual;

COLUMN_1
-------------------------------------------------------------------------------

Typ=1 Len=11: 97,46,98,99,32,100,45,101,47,102,0

SQL>