Fonction pour supprimer les accents dans postgreSQL [dupliquer]
Double Possible:
est-ce que PostgreSQL supporte les collations "insensibles à l'accent"?
j'essaie d'enlever les accents donc quand je fais un sélectionner il les ignore.
Exemple:
SELECT * FROM table WHERE
table.id ILIKE 'Jose';
renvoie:
José
Jose
Jósé
Jóse
ou quelque chose comme ça.
j'ai trouvé ces fonctions et elles ne fonctionneront pas, je pense que c'est peut-être le fait que je suis utilisation des entretoises 1.X, s'il vous plaît vérifiez-les et dites-moi où je me trompe ou quelle autre fonction devrais-je utiliser.
PREMIÈRE FONCTION
CREATE OR REPLACE FUNCTION unaccent_string(text) RETURNS text AS $$
DECLARE
input_string text := ;
BEGIN
input_string := translate(input_string, 'âãäåāăąÁÂÃÄÅĀĂĄ', '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;
DEUXIÈME FONCTION
CREATE OR REPLACE FUNCTION norm_text_latin(character varying)
RETURNS character varying AS
$BODY$
declare
p_str alias for ;
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, 'ÌÍÎÏ', 'IIII') into v_str;
select translate(v_str, 'ÒÓÔÕÖ', 'OOOOO') into v_str;
select translate(v_str, 'ÙÚÛÜ', 'UUUU') into v_str;
select translate(v_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, 'Çç', 'Cc') into v_str;
return v_str;
end;$BODY$
LANGUAGE 'plpgsql' VOLATILE;
les deux fonctions génèrent l'erreur suivante lorsque J'exécute le fichier dans NetBeans:
ERROR: unterminated dollar-quoted string at or near "*the string that starts the function*"
17
demandé sur
Community
2012-11-28 06:06:42
1 réponses
unaccent module qui est livré avec PostgreSQL.
somedb=# CREATE EXTENSION unaccent;
CREATE EXTENSION
somedb=# SELECT unaccent('Hôtel');
unaccent
----------
Hotel
somedb=# SELECT * FROM table WHERE lower(unaccent(table.id)) = lower('Jose');
Et accélérer un peu les choses en générant une accentless, écrit en minuscule indice:
somedb=# CREATE INDEX CONCURRENTLY ON table (lower(unaccent(id)));
65
répondu
titanofold
2012-11-28 03:10:03