Créer une fonction MySQL

Août 2013

Les fonctions ont été introduites dans MySQL 5, tout comme les procédures stockées et le trigger. À la différence des procédures stockées, les fonctions ne sont pas destinées à effectuer un traitement logique sur les données (un traitement métier propre à une application), mais elles servent à enrichir les fonctions natives proposées par MySQL comme LENGTH.

Les fonctions s'écrivent en langage SQL, le même langage que celui utilisé dans les procstock et les trigger, mais une fonction doit impérativement retourner un résultat via la commande RETURN.

Voici par exemple une excellente fonction slugify que j'utilise très souvent, qui sert à nettoyer et normaliser une chaîne de caractère en SQL (ce qu'on appelle un slug dans wordpress) :

Cette page peut vous intéresser : aperçu avant impression dans excel à lire tout de suite !

DELIMITER //
CREATE DEFINER=`root`@`localhost` FUNCTION `slugify`(dirty_string VARCHAR(200)) RETURNS VARCHAR(200) CHARSET latin1 DETERMINISTIC
BEGIN
	DECLARE x, y , z Int;
	DECLARE temp_string, allowed_chars, new_string VARCHAR(200);
	DECLARE is_allowed Bool;
	DECLARE c, check_char VARCHAR(1);

	SET allowed_chars = "abcdefghijklmnopqrstuvwxyz0123456789-";
	SET temp_string = dirty_string;

	SELECT temp_string Regexp('&') INTO x;
	IF x = 1 THEN
		SET temp_string = REPLACE(temp_string, '&', ' and ');
	END IF;

	SELECT temp_string Regexp('[^a-z0-9]+') INTO x;
	IF x = 1 THEN
		SET z = 1;
		While z <= Char_length(temp_string) Do
			SET c = Substring(temp_string, z, 1);
			SET is_allowed = False;
			SET y = 1;
			Inner_Check: While y <= Char_length(allowed_chars) DO
				IF (STRCMP(ASCII(SUBSTRING(allowed_chars,y,1)), ASCII(c)) = 0) THEN
					SET is_allowed = True;
					LEAVE Inner_Check;
				END IF;
				SET y = y + 1;
			End While;
			IF is_allowed = False THEN
				SET temp_string = REPLACE(temp_string, c, '-');
			END IF;

			SET z = z + 1;
		END WHILE;
	END IF;

	SELECT temp_string Regexp("^-|-$|'") INTO x;
	IF x = 1 THEN
		SET temp_string = REPLACE(temp_string, "'", '');
		SET z = Char_length(temp_string);
		SET y = Char_length(temp_string);
		Dash_check: WHILE z > 1 Do
			IF STRCMP(SUBSTRING(temp_string, -1, 1), '-') = 0 THEN
				SET temp_string = Substring(temp_string,1, y-1);
				SET y = y - 1;
			ELSE
				LEAVE Dash_check;
			END IF;
			SET z = z - 1;
		End While;
	END IF;

	REPEAT
		SELECT temp_string Regexp("--") INTO x;
		IF x = 1 THEN
			SET temp_string = REPLACE(temp_string, "--", "-");
		END IF;
	Until x <> 1 END REPEAT;

	RETURN temp_string;
END//
DELIMITER ;

source: http://nastyhabit.wordpress.com/2008/09/25/mysql-slug-maker-function-aka-the-slugifier/

Encore faim ? allez lire ça : enseigne de casino !

0 commentaire
facultatif
Facebook Twitter RSS Email
Forum Excel
Venez découvrir le nouveau forum excel question/réponse à la stackoverflow.com !
Forum Excel
hit parade n'en a rien a foutre du W3C Positionnement et Statistiques Gratuites Vincent Paré