2016-01-18 49 views
0

我有locations表具有city屬性。這些是波蘭的城市名稱,因此它可以是Łódź,格但斯克等(非ASCII字符的名稱)。如何搜索非ASCII字母的文本

我該怎麼辦尋找這些領域,這將使我的結果是這樣的:

search_term => city 

'Lodz' => 'Łódź' 
'gdansk' => 'Gdańsk' 
'Łodz' => 'Łódź' 

回答

1

您可以使用translate(),如:

create or replace function lower_pl(text) 
returns text language sql immutable as $$ 
    select translate(lower($1), 'ąćęłńóśźż', 'acelnoszz') 
$$; 

測試:

create table cities (name text); 
insert into cities values 
('Łódź'), ('Gdańsk'); 

select * 
from cities 
where lower_pl(name) = lower_pl('Łodz'); 

name 
------ 
Łódź 
(1 row) 
+0

我通常會建議不要使用'translate',而是建議轉換爲NFD和剝離修飾符(因爲這會提供通用性支持,不僅僅是波蘭語,並且你一定不會忘記任何異國情調的組合),但是''是一個例外(像'Ø'),因爲它不能被分解,所以你確實需要使用' translate' :-(不過,您可能想要使用IMMUTABLE函數,因此您可以使用該函數添加索引。 – jcaron

+0

@jcaron - 對,該函數應該聲明爲不可變的。更新。 – klin

+1

另一個選擇是'unaccent()'函數:http://www.postgresql.org/docs/current/static/unaccent.html –

相關問題