Игнорировать специальные символы в предложении 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%'