如何用空值替换非ASCII字符

时间:2019-04-24 03:08:16

标签: postgresql postgresql-9.4

如何在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 chareater

1 个答案:

答案 0 :(得分:0)

在第一个查询中,您尝试将LIKE与正则表达式一起使用,但这是不可能的,因此您要排除要替换字符的结果。请参见SIMILAR TO和{{ 3}}。

此外,replace函数可用于字符串,但不接受正则表达式。您必须使用regexp_replace。参见https://www.postgresql.org/docs/9.4/functions-matching.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');