postgresql - 如何用空值替换非ascii字符

标签 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 字符

最佳答案

在第一个查询中,您尝试将 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/

相关文章:

sql - 在 Postgres 中用其他值列表替换多个值

sql - 如何更新具有重复 ID 的引用表?

sql - 具有 generate_series 性能问题的 PostgreSQL CTE/子查询

postgresql - 错误 : function to_jsonb(text, jsonb) 不存在 - POSTGRESQL

ruby-on-rails - Rails 错误(无法找到 'id' =注销的用户)与 Postgres

sql - 如何在 Postgres 中使用 upsert

Postgresql - 正则表达式拆分带有潜在引号的 csv 行

postgresql - 阅读 PostgreSQL 排名结果

Postgresql 奇怪的索引大小

postgresql - 迄今为止的 Postgres 时间戳