db2除去所有非字母数字,包括不可打印的特殊字符

时间:2019-02-14 19:26:45

标签: db2 special-characters translate

这听起来像是重复的,但是现有的解决方案不起作用。 我需要从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??

1 个答案:

答案 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