Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Outils
Outils Forum d'entraide sur les outils pour MySQL. Avant de poster -> Outils MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/03/2007, 19h04   #1
Membre chevronné
 
Inscription : janvier 2006
Messages : 918
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 918
Points : 735
Points : 735
Par défaut Créer une fonction comportant un IF

Bonjour

J'essaye de créer une fonction qui, pour une chaîne de caractères donnée, renvoie soit les caractères situés avant un tiret délimiteur, soit les 3 premiers caractères en l'absence de délimiteur.
J'ai essayé avec ça, mais je n'arrive pas à créer la fonction. Quelqu'un pourrait-il m'aider ? Merci beaucoup.

Code :
1
2
3
4
5
6
 
CREATE FUNCTION func(arg CHAR(50)) RETURNS char(50)
	IF LEFT(arg, 1) REGEXP ('[0-9]') 
	THEN (RETURN SUBSTRING_INDEX(arg, ' - ', 1))
	ELSE (RETURN LEFT(arg, 3))
	END IF
guidav est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/03/2007, 06h52   #2
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Il faut que tu mettes un ; après l'instruction du THEN et après celle du ELSE (donc après chaque RETURN), plutôt que de les mettre entre parenthèses. Du coup, ça t'oblige à mettre le tout dans un BEGIN... END (ce qui peut poser pas mal de pbs avec certains clients).
Code :
1
2
3
4
5
6
7
8
CREATE FUNCTION func(arg CHAR(50)) RETURNS char(50)
BEGIN
 IF LEFT(arg, 1) REGEXP ('[0-9]') 
 THEN RETURN SUBSTRING_INDEX(arg, ' - ', 1) ;
 ELSE RETURN LEFT(arg, 3) ;
END IF ;
END
Si tu veux éviter le BEGIN... END, tu peux tourner la chose ainsi :

Code :
1
2
3
4
5
6
 
CREATE FUNCTION func(arg CHAR(50)) RETURNS char(50)
RETURN IF(LEFT(arg, 1) REGEXP ('[0-9]'),
SUBSTRING_INDEX(arg, ' - ', 1),
LEFT(arg, 3) 
) ;
cette version utilise la fonction IF() plutôt que l'instruction IF.
__________________
Antoun
Expert SQL, BO, Essbase

La bible d'Essbase est parue !
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/03/2007, 15h28   #3
Membre chevronné
 
Inscription : janvier 2006
Messages : 918
Détails du profil
Informations forums :
Inscription : janvier 2006
Messages : 918
Points : 735
Points : 735
Merci beaucoup, j'ai utilisé la version avec la fonction IF().
Je crois en effet que phpmyadmin n'aime pas les points-virgules multiples.
guidav est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h50.


 
 
 
 
Partenaires

Hébergement Web