IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Outils MySQL Discussion :

Créer une fonction comportant un IF


Sujet :

Outils MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 288
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  3. #3
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Par défaut
    Merci beaucoup, j'ai utilisé la version avec la fonction IF().
    Je crois en effet que phpmyadmin n'aime pas les points-virgules multiples.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Créer une fonction
    Par Jeffboj dans le forum Access
    Réponses: 7
    Dernier message: 15/04/2006, 20h49
  2. Créer une Fonction recherche sur Access
    Par remwideco dans le forum Access
    Réponses: 4
    Dernier message: 30/01/2006, 10h36
  3. créer une fonction avec parametre optionnel
    Par maximenet dans le forum Langage
    Réponses: 2
    Dernier message: 29/01/2006, 20h51
  4. Réponses: 6
    Dernier message: 10/08/2005, 11h36
  5. Créer une fonction mathématique pendant l'exécution
    Par zeprogrameur dans le forum Langage
    Réponses: 5
    Dernier message: 09/07/2004, 11h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo