我正在尝试使用翻译从VARCHAR2
删除某些字符。然而,字符160
(某种空格)和243
(段落控制字符?)似乎是“幻像”字符,INSTR
和TRANSLATE
无法察觉。 LENGTH
有效,但前提是它是字符串中唯一的字符。 LENGTH(CHR(160))
会返回1
,但当您认为它会返回LENGTH(CHR(160) || CHR(110))
时,1
也会返回2
。我发现REPLACE
可以从字符串中剥离这些幻像字符,但我更喜欢翻译,因为它更容易阅读和维护,而长嵌套或REPLACE
函数只是很麻烦。
是否有其他方法可以在不使用替换的情况下从VARCHAR2
中删除这些字符?
编辑:其他地方的字符243似乎注册为≤
。但是,当我明确选择此字符时,Oracle没有问题。当我选择CHR(243)
时,它只显示块替换字符。另外,this source指向段落字符243,这更有意义,因为这是一个控制代码。
答案 0 :(得分:0)
使用正则表达式怎么样?这可以通过替换char 160或243来删除您的故障字符:
SQL> select regexp_replace('abc' || chr(160) || chr(243) || 'def', '(' || chr(160) || '|' || chr(243) || ')', '') from dual;
REGEXP
------
abcdef
SQL>