删除postgreSQL中的口音的功能
发布时间:2020-12-13 16:28:43 所属栏目:百科 来源:网络整理
导读:Possible Duplicate: 07000 我试图删除重音,所以当我做一个SELECT它忽略它们. 例: SELECT * FROM table WHEREtable.id ILIKE 'Jose'; 它返回: JoséJoseJóséJóse 或类似的东西. 我发现这些功能,他们没有工作,我认为这可能是我使用Struts 1.X的事实,请检
我试图删除重音,所以当我做一个SELECT它忽略它们. 例: SELECT * FROM table WHERE table.id ILIKE 'Jose'; 它返回: José Jose Jósé Jóse 或类似的东西. 我发现这些功能,他们没有工作,我认为这可能是我使用Struts 1.X的事实,请检查出来,告诉我我错了什么或应该使用什么其他功能. 第一功能 CREATE OR REPLACE FUNCTION unaccent_string(text) RETURNS text AS $$ DECLARE input_string text := $1; BEGIN input_string := translate(input_string,'a???ā??á????ā??','aaaaaaaaaaaaaaa'); input_string := translate(input_string,'èééê?ē???ěē???ě','eeeeeeeeeeeeeee'); input_string := translate(input_string,'ìí??ì?ī?ìí??ì?ī?','iiiiiiiiiiiiiiii'); input_string := translate(input_string,'ó???ō??òó???ō??','ooooooooooooooo'); input_string := translate(input_string,'ùú?ü?ū??ùú?ü?ū??','uuuuuuuuuuuuuuuu'); return input_string; END; $$LANGUAGE plpgql; 第二功能 CREATE OR REPLACE FUNCTION norm_text_latin(character varying) RETURNS character varying AS $BODY$ declare p_str alias for $1; v_str varchar; begin select translate(p_str,'àá????','AAAAAA') into v_str; select translate(v_str,'éè?ê','EEEE') into v_str; select translate(v_str,'ìí??','IIII') into v_str; select translate(v_str,'òó???','OOOOO') into v_str; select translate(v_str,'ùú?ü','UUUU') into v_str; select translate(v_str,'àáa???','aaaaaa') into v_str; select translate(v_str,'èéê?','eeee') into v_str; select translate(v_str,'ìí??','iiii') into v_str; select translate(v_str,'òó???','ooooo') into v_str; select translate(v_str,'ùú?ü','uuuu') into v_str; select translate(v_str,'??','Cc') into v_str; return v_str; end;$BODY$ LANGUAGE 'plpgsql' VOLATILE; 当我在NetBeans中运行文件时,这两个函数都会生成以下错误: ERROR: unterminated dollar-quoted string at or near "*the string that starts the function*"
使用PostgreSQL附带的
unaccent模块.
somedb=# CREATE EXTENSION unaccent; CREATE EXTENSION somedb=# SELECT unaccent('H?tel'); unaccent ---------- Hotel somedb=# SELECT * FROM table WHERE lower(unaccent(table.id)) = lower('Jose'); 通过产生一个不重要的,较低的指数来加速事情: somedb=# CREATE INDEX CONCURRENTLY ON table (lower(unaccent(id))); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |