加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

删除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的事实,请检

Possible Duplicate:
07000

我试图删除重音,所以当我做一个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)));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读