我有一个我正在处理的文件,它不断给我错误。经过一番检查后,我意识到它有一些隐藏的特殊字符。
我只是手动找到了隐藏的字符并进行了简单的替换,如
REPLACE( String,'', '')
我怎么能阻止将来发生这种情况?
我尝试创建一个存储这些隐藏的ascii字符的表,这些字符在 125-255 的范围内,但数据库不会相应地存储它们。
例如, chr(168)
与ascii 168
不同。
select chr('168'),
convert(chr('168'),
'US7ASCII',
'WE8ISO8859P1')
from dual;
我还能尝试什么?
答案 0 :(得分:0)
易于编写,但执行速度最快 - 使用regexp_replace:
update table_name
set column_name =
regexp_replace(column_name, '[' || chr(125) || '-' || chr(255) || ']', '')
;
效率更高,但是书写和维护的痛苦(你可以编写一些代码来生成代码,以节省一些打字):
...
set column_name =
translate(column_name, '~' || chr(125) || chr(126) || ..... || chr(255), '~')
;
是的,使用translate()
,你必须将它们拼写出来,没有“范围”概念... {: - (
这是为了更改表中已有的数据。如果可以的话,在数据进入时修复数据会更好 - 使用类似的转换。