2014-03-06 22 views
3

我正尝试使用translate从VARCHAR2中删除某些字符。但是,字符160(某种空间)和243(段落控制字符?)似乎是INSTRTRANSLATE均无法检测到的“幻影”字符。 LENGTH的作品,但只有它是字符串中唯一的字符。 LENGTH(CHR(160))返回1,但LENGTH(CHR(160) || CHR(110))也会返回1,如果您认为它会返回2。我发现REPLACE可用于从字符串中去除这些幻像字符,但我喜欢翻译得更好,因为它更易于阅读和维护,而长嵌套或REPLACE函数只是很麻烦。为什么不翻译某些字符的作品?

有没有其他方法可以从VARCHAR2中去掉这些字符而不使用替换?

编辑:它看起来在其他地方的字符登记为。但是,当我明确选择它时,Oracle没有显示这个字符的问题。当我选择CHR(243)时,它只显示块替换字符。此外,this source指向段落字符243更有意义,因为这是一个控制代码。

+0

'ASCIISTR()'可以剥离出他们.. –

+0

@OracleUser这实际上是越来越近了。但是,它不会去除不支持的字符,而是将它们转换为'\ FFFD \ FFFD'。如果它可以转换它们,那么它也可以将它们删除。如果'\ FFFD'在列中是有效的字符串,我不能使用正则表达式。 – oscilatingcretin

+0

你可以给我'dump(your_column)'样本吗? –

回答

0

使用正则表达式怎么样?这用什么代替焦炭160或243删除你的麻烦人物:

SQL> select regexp_replace('abc' || chr(160) || chr(243) || 'def', '(' || chr(160) || '|' || chr(243) || ')', '') from dual; 

REGEXP 
------ 
abcdef 

SQL> 
相关问题