如何在postgresql中用空值替换非ascii字符
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:]]'
以上两个查询没有给出预期结果 你能告诉我如何编写查询以在 postgresql 中用空值替换非 ascci 字符
最佳答案
在第一个查询中,您尝试将 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');
关于postgresql - 如何用空值替换非ascii字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55821833/