Bonjour !
Le problème : la fonction suivante a été écrite dans le but d'épurer les chaînes de caractères rentrées.
Par exemple : ' Hello World !' devient 'Hello World !' sans deux espaces consécutifs.
La voici :
Elle marche très bien avec un séparateur autre qu'un espace.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 DROP FUNCTION IF EXISTS REDUCE_DELIM;// CREATE FUNCTION REDUCE_DELIM (str TEXT, delim CHAR(1)) RETURNS VARCHAR(255) BEGIN DECLARE f_str VARCHAR(255) DEFAULT ''; DECLARE i INT DEFAULT 1; DECLARE car CHAR(1); DECLARE p_car CHAR(1); SET str = TRIM(BOTH SUBSTRING(delim, 2, 1) FROM str); WHILE i <= CHAR_LENGTH(str) DO SET car = SUBSTRING(str, i, 1); SET p_car = SUBSTRING(str, i -1, 1); IF car != delim OR p_car != delim THEN SET f_str = CONCAT(f_str, car); END IF; SET i = i + 1; END WHILE; RETURN f_str; END;//
';;;;;;;;;;;;;;;Hello;;;;;World;;;;' devient bien 'Hello;World' si le délimiteur est le point-virgule.
Malheureusement, elle n'aime pas les espaces. Par exemple, REDUCE_DELIM(' Hello world ', ' ') renvoie systématiquement 'Helloworld'.
Pire, elle enlève les espaces même quand ils ne sont pas délimiteurs. REDUCE_DELIM(' __Good morning__everybody', '_ ') renvoie 'Goodmorning_everybody'.
J'ai testé chaque fonction utilisée (TRIM, SUBSTRING, CONCAT) et aucune n'avait de comportement étrange vis-à-vis des espaces. Ceci-dit, je peux me tromper.
Quelqu'un a une idée ?
Partager