Игнорировать специальные символы в предложении WHERE

У меня есть стол с именем artists с записью со значением 'Миро' в столбце имени. Когда я делаю этот запрос:

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

У меня есть один результат, поэтому он работает.

Теперь, когда я делаю этот запрос (без специального ó):

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

Я ничего не нахожу. Я хочу игнорировать специальный символ. Есть ли способ сделать это?
У меня есть postgres 9.1.9.

2 ответа

Решение

Для более точного соответствия шаблону вы можете использовать функцию unaccent(), предоставляемый дополнительным модулем unaccent:

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

Чтобы сделать это быстро, создайте функциональный индекс. Вы должны преодолеть препятствие, что функция только STABLE не IMMUTABLE, Недавно я написал исчерпывающий ответ с инструкциями (включая установку) и ссылками:
Поддерживает ли PostgreSQL сортировку без учета акцента?

Вместо этого вы можете попробовать использовать LIKE...

SELECT "artists".* FROM "artists" WHERE name like 'Mir%'
Другие вопросы по тегам