UNACCENT
函数可以删除字符变音符号。但是,在我的情况下,它只能剥离带有1个变音符号的字符,例如
对于具有1个以上变音符号的字符,UNACCENT
不执行任何操作,例如
有没有办法让Postgres从这些角色中删除重音?
由于
答案 0 :(得分:4)
PostgreSQL的defmodule MyApp.ApiSecurity do
def init(options) do
options
end
def call(conn, _opts) do
# checking if "api-key" headers exists
# and key is valid
# .... what's next?
# if it's a) valid
# b) invalid or there's no "api-key" header
# ???
end
end
模块不使用Unicode规范化,而只使用简单的搜索和替换字典。默认字典unaccent.rules
不包含这些越南字符,因此没有做任何事情。
你可以创建自己的非语言字典。 As explained in the documentation:
使用
等内容创建文本文件unaccent
vietnamese.rules
将ầ a
Ầ A
ồ o
Ồ O
移至文件夹vietnamese.rules
(通常为$SHAREDIR/tsearch_data/
)
运行该功能
/usr/share/postgresql/tsearch_data
答案 1 :(得分:1)
您可以创建一个新功能来完成unaccent
的工作,如下所示:
CREATE OR REPLACE FUNCTION public.vietnamese_unaccent(text)
RETURNS text
LANGUAGE plpgsql
AS $function$
DECLARE
input_string text := $1;
BEGIN
input_string := translate(input_string, 'áàãạảAÁÀÃẠẢăắằẵặẳĂẮẰẴẶẲâầấẫậẩÂẤẦẪẬẨ', 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
input_string := translate(input_string, 'éèẽẹẻEÉÈẼẸẺêếềễệểÊẾỀỄỆỂ', 'eeeeeeeeeeeeeeeeeeeeeeee');
input_string := translate(input_string, 'íìĩịỉIÍÌĨỊỈ', 'iiiiiiiiiii');
input_string := translate(input_string, 'óòõọỏOÓÒÕỌỎôốồỗộổÔỐỒỖỘỔơớờỡợởƠỚỜỠỢỞ', 'ooooooooooooooooooooooooooooooooooo');
input_string := translate(input_string, 'úùũụủUÚÙŨỤỦưứừữựửƯỨỪỮỰỬ', 'uuuuuuuuuuuuuuuuuuuuuuu');
input_string := translate(input_string, 'ýỳỹỵỷYÝỲỸỴỶ', 'yyyyyyyyyyy');
input_string := translate(input_string, 'dđĐD', 'dddd');
return input_string;
END;
$function$
对我有用!
答案 2 :(得分:0)
如果你从 13 版开始使用,Postgresql 已经支持这个功能了:
select normalize('hồ, phố, ầ', NFC) → 'ho, pho, a' -- NFC (the default), NFD, NFKC, or NFKD.