2013-06-18 6 views
2

이름 열에 값이 'Mir'인 레코드가있는 artists 테이블이 있습니다. 이 요청을 할 때 :WHERE 절의 특수 문자를 무시합니다.

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

결과가 하나이므로 작동합니다.

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

난 아무것도 찾을 수 없습니다 : 나는 (특별 ó없이)이 요청을 수행 할 때 이제

. 나는 특별한 숯을 무시하고 싶다. 그것을 할 수있는 방법이 있습니까?
나는 postgres 9.1.9 있습니다.

+0

어쩌면 검색중인 문자열에서 특수 문자를 제거하고'= '대신'LIKE'를 사용할 수도 있습니다. . 'WHERE name like'와 같은 것. MIR_ ' –

+0

음, 두 글자가 다릅니다. 그래서, 당신은 아마도 'SELECT "아티스트 같은 것이 필요할 것입니다. * FROM"artist "WHERE 이름은'Mir_' like –

+0

저는 이미 거기에 해결책이 기존의 stackoverflow에 있다고 생각합니다 : http://stackoverflow.com/questions/ 11003140/does-postgresql-support-accent-insensitive-collations – thmshd

답변

4

이 더 대상 패턴 매칭 들어, 추가 모듈 unaccent에 의해 제공되는 기능 unaccent() 사용할 수 있습니다 사용하여 시도 할 수 :

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

을 이를 빠르게 수행하려면 기능 색인을 작성하십시오. 기능이 STABLEIMMUTABLE이 아니라 장애물을 극복해야합니다. Does PostgreSQL support "accent insensitive" collations?

+1

작동합니다. 영웅과도. – Dougui

0

당신은 LIKE 대신 ...

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

예, 작동하지만 모든 문자를 바꾸려고하지 않습니다. Miro를 입력하면 Miru, Miri 또는 Mira를 갖고 싶지 않습니다. – Dougui

+0

의미가 있습니다. 어윈이 훌륭한 대답을 한 것처럼 보입니다. – JDCartee