db2 удаляет все не алфавитно-цифровые, включая непечатаемые и специальные символы - PullRequest
0 голосов
/ 14 февраля 2019

Это может звучать как дубликат, но существующие решения не работают.Мне нужно удалить все не буквенно-цифровые символы из поля varchar.Я использую следующее, но оно работает не во всех случаях (оно работает с символами алмазного знака вопроса):

  select TRANSLATE(FIELDNAME, '?',
                 TRANSLATE(FIELDNAME , '', 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789')) 
   from TABLENAME

Что он делает, так это внутренний перевод, анализирует все не алфавитно-цифровые символы, а затем внешнийперевести замените их все на «?».Это похоже на замену персонажа replacement.Тем не менее, он выдает 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 голосов
/ 14 февраля 2019

Попробуйте regexp_replace(c,'[^\w\d]','')

Например

select regexp_replace(c,'[^a-zA-Z\d]','') from table(values('AB_- C$£abc�$123£')) t(c)

, который возвращает

1
---------
ABCabc123
...