FAQ UDF

FAQ UDFConsultez toutes les sources
Nombre d'auteurs : 3, nombre de sources : 37, création le 1er mars 2013
Sommaire→Fonctions sur les chaines de caracteresSélectionnez
CREATE OR REPLACE FUNCTION "public"."soundexfr" (text) RETURNS text AS
$body$
/*
Fonction SOUNDEX francisé
Exemple : SELECT soundexfr('durand'),soundexfr('durhand'),soundexfr('durond'),soundexfr('dupond');
D653 D653 D653 D153
*/
DECLARE
st text;
st2 text;
i int2;
ch char;
BEGIN
st2:='';
-- on transforme les voyelles et on passe en majuscule
st:=translate($1,'aàäâeéèêëiïîoôöuùûücç','AAAAEEEEEIIIOOOUUUUCC');
st:=upper(st);
-- on enleve les espaces
FOR i IN 1..length(st) LOOP
IF substring(st,i,1)<>' ' THEN
st2:=st2||substring(st,i,1);
END IF;
END LOOP;
st:='';
FOR i IN 1..length(st2) LOOP
IF NOT (substring(st2,i,1) IN ('A','E','I','O','U','Y','H','W')) THEN
st:=st||substring(st2,i,1);
END IF;
END LOOP;
st2:=substring(st,1,1);
FOR i IN 2..length(st) LOOP
ch:=substring(st,i,1);
IF ch IN ('B','P') THEN st2:=st2||'1';
ELSIF ch IN ('C','K','Q') THEN st2:=st2||'2';
ELSIF ch IN ('D','T') THEN st2:=st2||'3';
ELSIF ch='L' THEN st2:=st2||'4';
ELSIF ch IN ('M','N') THEN st2:=st2||'5';
ELSIF ch='R' THEN st2:=st2||'6';
ELSIF ch IN ('G','J') THEN st2:=st2||'7';
ELSIF ch IN ('S','X','Z') THEN st2:=st2||'8';
ELSIF ch IN ('F','V') THEN st2:=st2||'9';
END IF;
END LOOP;
st:=substring(st2,1,1);
FOR i IN 1..length(st2) LOOP
IF substring(st2,i,1) <> substring(st,length(st),1) THEN
st:=st||substring(st2,i,1);
END IF;
END LOOP;
IF length(st)<4 THEN
FOR i IN length(st)..4 LOOP
st:=st||'0';
END LOOP;
ELSIF length(st)>4 THEN
st:=substring(st,1,4);
END IF;
return st;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;Créé le 20 août 2005 par Damien Griessinger (HpAlpha)
Sélectionnez
CREATE OR REPLACE FUNCTION "public"."encode64" (chaine text) RETURNS text AS
$body$
/*
Encodage en base 64
Exemple : SELECT encode64('Salut');
Ks5iTNG
*/
DECLARE
i integer;
a integer = 0;
x integer;
b integer = 0;
resultat text = '';
codes64 text = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/';
BEGIN
FOR i IN 1..length(chaine) LOOP
x:=ascii(substring(chaine from i for 1));
b:=b*256+x;
a:=a+8;
WHILE a>=6 LOOP
a:=a-6;
x:=b/(1<<a);
b:=b%(1<<a);
resultat:=resultat||substring(codes64 from x+1 for 1);
END LOOP;
END LOOP;
IF a>0 THEN
x:=b<<(6-a);
resultat:=resultat||substring(codes64 from x+1 for 1);
END IF;
return resultat;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;Créé le 20 août 2005 par Damien Griessinger (HpAlpha)
Sélectionnez
CREATE OR REPLACE FUNCTION "public"."decode64" (chaine text) RETURNS text AS
$body$
/*
Decodage en base 64
Exemple : SELECT decode64('Ks5iTNG');
Salut
*/
DECLARE
i integer;
a integer = 0;
x integer;
b integer = 0;
codes64 text = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/';
resultat text = '';
BEGIN
FOR i IN 1..length(chaine) LOOP
x:=position(substring(chaine from i for 1) in codes64)-1;
IF x>=0 THEN
b:=b*64+x;
a:=a+6;
IF a>=8 THEN
a:=a-8;
x:=b>>a;
b:=b%(1<<a);
x:=x%6;
resultat:=resultat||chr(x);
END IF;
ELSE
Exit;
END IF;
END LOOP;
return resultat;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;Créé le 20 août 2005 par Damien Griessinger (HpAlpha)
Sélectionnez
CREATE OR REPLACE FUNCTION "public"."inverserchaine" (chaine text) RETURNS text AS
$body$
/*
Inverse la chaine
Exempe : SELECT inverserchaine('postgresql');
lqsergtsop
*/
DECLARE
i integer;
resultat text = '';
BEGIN
FOR i IN REVERSE length(chaine)..1 LOOP
resultat:=resultat||substring(chaine from i for 1);
END LOOP;
return resultat;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;Créé le 20 août 2005 par Damien Griessinger (HpAlpha)
Sélectionnez
CREATE OR REPLACE FUNCTION "public"."minimizetext" (text) RETURNS text AS
$body$
/*
Fonction minimizetext
Permet de simplifier une phrase au maximum
-> Suppression des lettres en doubles
-> Conversion des accents
Exemple : SELECT minimizetext('hellllooooo monnnnndeeee');
helomonde
*/
DECLARE
chaine text;
desti text;
last char(1);
current char(1);
i integer;
BEGIN
chaine:=translate(lower($1),'àâéèêëîïìôòùû','aaeeeeiiioouu');
chaine:=replace(chaine,'-','');
chaine:=replace(chaine,' ','');
chaine:=trim(chaine);
last:=' ';
desti:='';
FOR i IN 1..length(chaine) LOOP
current:=substring(chaine,i,1);
IF current<>last THEN
last:=current;
desti:=desti||current;
END IF;
END LOOP;
RETURN desti;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE RETURNS NULL ON NULL INPUT SECURITY INVOKER;Créé le 20 août 2005 par Damien Griessinger (HpAlpha)
Sélectionnez
CREATE OR REPLACE FUNCTION "public"."stroccurence" (chaine text, souschaine text) RETURNS integer AS
$body$
/* Compte le nombre d'occurence d'une souschaine dans une chaine
Exemple : SELECT stroccurence('Ici un mot, et la un deuxieme mot','mot');
2
*/
BEGIN
return array_upper(string_to_array(chaine,souschaine),1)-1;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;Créé le 30 août 2005 par Damien Griessinger (HpAlpha)



