如何将非 ASCII 字符替换为空值



如何在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');

最新更新