как заменить не ascii символы на пустые значения - PullRequest
0 голосов
/ 24 апреля 2019

как заменить не ascii символ пустыми значениями в postgresql

table :Emp
address
Îlt-t-Fce
ÄddÄ« ÄrkÊ¿ay
ʿAlūla

на основе приведенных выше данных. Я хочу получить результат, как показано ниже

Address
Ilt-t-Fce
AddAArkEay
EAlAla

Я пробовал как показано ниже

SELECT replace(addres,'%[^a-Z0-9, ]%',' ')
FROM emp
WHERE address like '%[^a-Z0-9, ]%'
or 
select   replace(addres,'^[^[:ascii:]]',' ') from  emp where  address ~ '^[^[:ascii:]]' 

выше двух запросов не дают ожидаемого результата. Подскажите, пожалуйста, как написать запрос для замены не ascci chareater пустыми значениями в postgresql

1 Ответ

0 голосов
/ 24 апреля 2019

В первом запросе вы пытаетесь использовать LIKE с регулярным выражением, но это невозможно, поэтому вы исключаете результаты, в которых вы хотите заменить символы. См. SIMILAR TO и https://www.postgresql.org/docs/9.4/functions-matching.htmlдля более подробной информации.

Более того, функция replace работает со строками, но не принимает регулярные выражения.Вы должны использовать regexp_replace.См. https://www.postgresql.org/docs/9.4/functions-string.html.

Ваше решение:

SELECT regexp_replace(address, '[^[:ascii:]]', '', 'g');
FROM emp
WHERE address SIMILAR TO '%[^[:ascii:]]%';

Флаг g означает глобальный, поэтому он заменит каждое вхождение.Если вы его опустите, он удалит только первое вхождение.

Другие примеры:

Чтобы исключить символы с акцентом:

select regexp_replace(address, '[À-ÿ]', '', 'g');

Чтобы исключить не алфавитно-цифровые символы:

select regexp_replace(address, '[^[:alnum:]]', '', 'g');
...