2016-12-14 11 views
1

이 나는 ​​테이블 내가 쿼리 실행하려고 연락처Postgresql select 쿼리에서 모든 상대 억양을 찾는 방법?

id |  name  
----+------------------ 
44 | Aarón 

라는 이름의 한 : 그것은 내가 ' 오 '를 검색하는 것을 시도하고있다 (0 rows)

을 반환

select id,name from contacts where name ilike 'Aaro%'; 

및 결과에 'o'과 같은 액센트가 포함될 것으로 예상됩니다. 'ó '. 내가 검색 및 stackoverlfowing 몇 가지 했어 로케일을 사용하여 그 데이터 정렬을 설치해야합니다. 그래서 나는 PostgreSQL 데이터베이스의 데이터 정렬을 설치하려고 한 그 이후

sudo locale-gen --no-archive de_DE.utf-8 

에 의해 리눅스의 조합을 설치했습니다.

create collation de (LOCALE='de_DE.utf-8'); 

데이터 정렬이 성공적으로 생성되었습니다. select * from pg_collation;을 사용하여이 정렬을 나열하려고했습니다. 그리고 거기에있다.

내가 쿼리에 의해 모든 상대 강세 'O'의 결과를 얻기 위해 다시 노력이 모든 일을 후 :

select id,name from contacts where name ilike 'Aaro%'; 

을하지만 다시 난 (0 rows)

가 Ultimatly 내가 때 기록 "아론"를 원하는 있어요 I 위의 쿼리를 실행하십시오.

미리 감사드립니다.

+0

http://dba.stackexchange.com/questions/124695/postgresql-translate-special- : 당신이 합자없이 문자의 작은 집합을 다루는 경우에 당신은 양자 택일 폴란드어 이와 같은 간단한 기능을 사용할 수 있습니다 문자를 입력하거나 직접 정의 할 수 있습니다. –

+0

데이터 정렬은 등호 검사 (예 : 'LIKE', 'ILIKE', '~'등)를 변경하지 않고 데이터를 다른 규칙 집합으로 정렬하는 데 도움을줍니다 (일부 언어는 악센트 부호가있는 문자 순서 지정에 엄격한 규칙이 있음) . PostgreSQL에서 문제의 전형적인 해결책은'unaccent()'입니다 (해답 참조). – pozs

답변

3

unaccent 포스트그레스 모듈을 사용할 수 있습니다.

에 대해서는 시스템에 postgresql-contrib을 설치해야합니다. debian 기반 리눅스에서 아래의 명령을 사용하여 설치할 수 있습니다.

sudo apt-get install postgresql-contrib 

이후에는 포스트그레스에서 악센트를 만들 수 있습니다.

postgres_db=# create EXTENSION unaccent; 
CREATE EXTENSION 
postgres_db=# select name from test where unaccent(name) ilike 'Aaro%'; 
name 
------- 
Aarón 
(1 row) 

희망이 있습니다.

+0

굉장 !!, 감사합니다 아툴, 지금 일하고 있습니다. –

1

확장자 unaccent은 좋은 해결책입니다.

create or replace function unaccent_pl(text) 
returns text language sql immutable as $$ 
    select translate($1, 'ąćęłńóśźżĄĆĘŁŃÓŚŹŻ', 'acelnoszzACELNOSZZ') 
$$; 

select unaccent_pl('Zażółć gęślą jaźń'); 

    unaccent_pl  
------------------- 
Zazolc gesla jazn 
(1 row) 
+0

'translate()'는 좋은 대안이 될 수 있지만 사람들은 보통 유니 코드 결합 마크 (https://en.wikipedia.org/wiki/Combining_character)를 사용할 때이를 잊어 버립니다.그리고, 불행하게도 [PostgreSQL은 유니 코드를 정상화하지 않습니다.] (아직은) http://stackoverflow.com/questions/24863716/unicode-normalization-in-postgres. – pozs

+0

위에서 언급했듯이'translate()'는 제한적으로 사용됩니다. 데이터가 잘 작성된 클라이언트 응용 프로그램에서 온 경우 유니 코드 정규화는 문제가되지 않습니다. – klin