修剪后不删除尾部空间

phe*_*mix 0 oracle oracle11g oracle11gr2

我运行此查询:

select trim(utl_raw.cast_to_varchar2((nlssort(d.det_entete, 'nls_sort=binary_ai')))) entete,
length(trim(utl_raw.cast_to_varchar2((nlssort(d.det_entete, 'nls_sort=binary_ai'))))) nb 
from details_param_import d join param_import_table p on d.param_code = p.param_code;
Run Code Online (Sandbox Code Playgroud)

结果如下:

在此处输入图片说明

那么如何删除尾随空间呢?

Ale*_*ole 5

如果您dump()修改了值,则可以看到结尾处有一个空字节,而不是空格;并且length()仍然被认为是一个字:

column entete format a20
column bytes format a40

with details_param_import (det_entete) as (
  select 'nom' from dual
  union all select 'prenom' from dual
)
select trim(utl_raw.cast_to_varchar2((nlssort(d.det_entete, 'nls_sort=binary_ai')))) entete,
length(trim(utl_raw.cast_to_varchar2((nlssort(d.det_entete, 'nls_sort=binary_ai'))))) nb,
  dump(trim(utl_raw.cast_to_varchar2((nlssort(d.det_entete, 'nls_sort=binary_ai'))))) bytes
from details_param_import d
/

ENTETE                       NB BYTES                                   
-------------------- ---------- ----------------------------------------
nom                           4 Typ=1 Len=4: 110,111,109,0              
prenom                        7 Typ=1 Len=7: 112,114,101,110,111,109,0
Run Code Online (Sandbox Code Playgroud)

这是怎样的一个副作用nlssort()作品

您可以显式地修剪掉它:

with details_param_import (det_entete) as (
  select 'nom' from dual
  union all select 'prenom' from dual
)
select rtrim(utl_raw.cast_to_varchar2((nlssort(d.det_entete, 'nls_sort=binary_ai'))), chr(0)) entete,
length(rtrim(utl_raw.cast_to_varchar2((nlssort(d.det_entete, 'nls_sort=binary_ai'))), chr(0))) nb,
  dump(rtrim(utl_raw.cast_to_varchar2((nlssort(d.det_entete, 'nls_sort=binary_ai'))), chr(0))) bytes
from details_param_import d
/

ENTETE                       NB BYTES                                   
-------------------- ---------- ----------------------------------------
nom                           3 Typ=1 Len=3: 110,111,109                
prenom                        6 Typ=1 Len=6: 112,114,101,110,111,109    
Run Code Online (Sandbox Code Playgroud)

那对您真正想做的事情是否有用是另一回事;查询排序键,而不是将其用于排序或比较,可能没有什么用。您似乎正在使用它来删除字符串中的重音符号,但是较长的值可能会被截断(如文档所述),即使是较短的字符串也似乎无法保证最终会达到您的期望。因此,如果这一天中断,不要太惊讶。