忽略WHERE子句中的特殊字符

时间:2013-06-18 21:12:07

标签: sql postgresql pattern-matching unaccent

我有一个名为artists的表,其名称列中包含值为'Miró'的记录。当我这样做时:

SELECT "artists".* FROM "artists" WHERE name = 'Miró'

我有一个结果,所以它有效。

现在,当我执行此请求时(没有特殊ó):

SELECT "artists".* FROM "artists" WHERE name = 'Miro'

我什么都没发现。我想忽略特殊字符。有办法吗?
我有postgres 9.1.9。

2 个答案:

答案 0 :(得分:4)

要获得更有针对性的模式匹配,您可以使用附加模块unaccent提供的 unaccent() 功能:

SELECT * FROM artists WHERE unaccent(name) = 'Miro';

要快速完成此操作,请创建功能索引。您必须克服该功能仅STABLE而非IMMUTABLE的障碍。我最近写了一份包含说明(包括安装)和链接的综合答案:
Does PostgreSQL support "accent insensitive" collations?

答案 1 :(得分:0)

您可以尝试使用LIKE ......

SELECT "artists".* FROM "artists" WHERE name like 'Mir%'