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

Requêtes MySQL Discussion :

IF et CONCAT complexe


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Par défaut IF et CONCAT complexe
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    IF(
    lieu_naissance <> NULL,
    CONCAT(DATE_FORMAT(date_naissance, '%d/%m/%Y'), ' à ', lieu_naissance),
    date_naissance
    ) as naissance
    Ce code ne fonctionne pas.

    Merci d'avance pour votre aide...

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 065
    Par défaut
    Bonjour,

    Qu'est-ce qui "ne fonctionne pas" ? Un message d'erreur ? Un résultat inattendu ?
    Au passage, il faut remplacer par Autre remarque, les 2 valeurs renvoyées par le IF sont de types différents : le premier est une chaîne de caractères et l'autre une date. Il faut que ce soit le même type (même si MySQL effectue des conversions de type implicites).

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    IF(
    m.lieu_naissance IS NOT NULL,
    CONCAT(CAST(DATE_FORMAT(m.date_naissance, '%d/%m/%Y') AS CHAR), ' à ', m.lieu_naissance),
    CAST(m.date_naissance AS CHAR)
    ) as Naissance
    Modifiée ainsi, ca marche mais j'ai des résultats inattendus.
    06/01/1939 à Mbiane
    C'est un bon résultat.
    29/03/1945 à
    Mais celui est mauvais, car je veux " à " uniquement quand
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m.lieu_naissance IS NOT NULL
    Quelle est mon erreur?

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Essaie plutôt avec un CASE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CASE 
        WHEN m.lieu_naissance IS NOT NULL 
            THEN CONCAT(CAST(DATE_FORMAT(m.date_naissance, '%d/%m/%Y') AS CHAR), ' à ', m.lieu_naissance)
        ELSE CAST(DATE_FORMAT(m.date_naissance, '%d/%m/%Y') AS CHAR)
    END AS Naissance
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Par défaut
    @CinePhil : merci, mais j'ai le même résultat. Je ne connais pas cette façon.

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Si tu as 'une_date à' alors que la colonne m.lieu_naissance est bel et bien NULL, ce n'est pas logique !

    Es-tu sûr que la colonne soit à NULL et non pas qu'elle contienne une chaîne vide ?
    Si tu as certaines lignes avec des NULL et d'autres avec des chaînes vides, complète la condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CASE 
        WHEN m.lieu_naissance IS NOT NULL OR m.lieu_naissance = ''
            THEN CONCAT(CAST(DATE_FORMAT(m.date_naissance, '%d/%m/%Y') AS CHAR), ' à ', m.lieu_naissance)
        ELSE CAST(DATE_FORMAT(m.date_naissance, '%d/%m/%Y') AS CHAR)
    END AS Naissance
    Tu peux aussi mettre à jour les lignes qui ont une chaîne vide pour les mettre à NULL.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre éprouvé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    CASE valeur 
        WHEN [compare-value] THEN résultat [WHEN [compare-value] 
            THEN résultat ...] 
        [ELSE résultat] 
    END, 
    CASE 
        WHEN [condition] 
            THEN résultat 
        [WHEN [condition] 
            THEN résultat ...] 
        [ELSE résultat] 
    END
    Quelqu'un pourrait m'expliquer cette syntaxe et comment ca fonctionne ? Est-ce je l'ai bien indenté ce code?

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

Discussions similaires

  1. [langage] structures complexes et affichage
    Par mat21 dans le forum Langage
    Réponses: 5
    Dernier message: 18/02/2004, 15h38
  2. Encore une requête complexe sur plusieurs tables
    Par DenPro dans le forum Langage SQL
    Réponses: 5
    Dernier message: 09/12/2003, 19h05
  3. Requête complexe sur plusieurs table
    Par DenPro dans le forum Langage SQL
    Réponses: 13
    Dernier message: 25/11/2003, 17h50
  4. Réponses: 5
    Dernier message: 04/08/2003, 21h50
  5. Réponses: 7
    Dernier message: 07/04/2003, 09h35

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