0
我有locations
表具有city
屬性。這些是波蘭的城市名稱,因此它可以是Łódź,格但斯克等(非ASCII字符的名稱)。如何搜索非ASCII字母的文本
我該怎麼辦尋找這些領域,這將使我的結果是這樣的:
search_term => city
'Lodz' => 'Łódź'
'gdansk' => 'Gdańsk'
'Łodz' => 'Łódź'
我有locations
表具有city
屬性。這些是波蘭的城市名稱,因此它可以是Łódź,格但斯克等(非ASCII字符的名稱)。如何搜索非ASCII字母的文本
我該怎麼辦尋找這些領域,這將使我的結果是這樣的:
search_term => city
'Lodz' => 'Łódź'
'gdansk' => 'Gdańsk'
'Łodz' => 'Łódź'
您可以使用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)
我通常會建議不要使用'translate',而是建議轉換爲NFD和剝離修飾符(因爲這會提供通用性支持,不僅僅是波蘭語,並且你一定不會忘記任何異國情調的組合),但是''是一個例外(像'Ø'),因爲它不能被分解,所以你確實需要使用' translate' :-(不過,您可能想要使用IMMUTABLE函數,因此您可以使用該函數添加索引。 – jcaron
@jcaron - 對,該函數應該聲明爲不可變的。更新。 – klin
另一個選擇是'unaccent()'函數:http://www.postgresql.org/docs/current/static/unaccent.html –