这听起来像是重复的,但是现有的解决方案不起作用。 我需要从varchar字段中删除所有非字母数字。我正在使用以下内容,但并非在所有情况下都有效(它适用于菱形问号字符):
select TRANSLATE(FIELDNAME, '?',
TRANSLATE(FIELDNAME , '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'))
from TABLENAME
它的作用是内部翻译解析所有非字母数字字符,然后外部翻译将所有非英文字符替换为'?'。这似乎适用于替换字符。但是,它会抛出The second, third or fourth argument of the TRANSLATE scalar function is incorrect.
,根据IBM的期望:
The TRANSLATE scalar function does not allow replacement of a character by another character which is encoded using a different number of bytes. The second and third arguments of the TRANSLATE scalar function must end with correctly formed characters
。
总有办法解决这个问题吗?
编辑:@Paul Vernon的解决方案似乎正在起作用:
· 6005308 ??6005308
–6009908 ?6009908
–6011177 ?6011177
��6011183�� ??6011183??
答案 0 :(得分:2)
尝试regexp_replace(c,'[^\w\d]','')
例如
select regexp_replace(c,'[^a-zA-Z\d]','') from table(values('AB_- C$£abc�$123£')) t(c)
返回
1
---------
ABCabc123