2017-10-05 16 views
1

J'ai une base de données qui contient essentiellement des adressesMySQL SELECT conditionnelle CONCAT

Le tableau (tblAddress) ressemble à ceci ...

housename | housenumber | address1 | address2  | address3 | town  | postcode 
Banana House |   29 | Acacia Road | Yellow Skin Way |   | Nuttytown | W1 1MP 

Quand je recherche la base de données basée sur un code postal Je veux être capable de revenir et le résultat comme celui-ci ...

Banana House,29 Acacia Road,Yellow Skin Way,Nuttytown,W1 1MP 

donc j'ai besoin du numéro de maison concaténé avec address1 IF address1 est rempli. Sinon, concattez avec address2 ou address3. Ensuite, le reste de l'adresse à suivre selon l'exemple.

J'ai essayé d'utiliser des déclarations IF et CASE, mais ne semblent pas arriver à quelque chose près de la sortie que je suis après.

Espérons que cela a du sens.

Répondre

2

Vous pouvez le faire en ajoutant quelques opérations concat.

Vérifiez ci-dessous le code devrait fonctionner.

SELECT CONCAT(housename, CONCAT(" ",CONCAT(housenumber, CONCAT(" ",CONCAT_WS(' ,', 
        NULLIF(address1, ''), 
        NULLIF(address2, ''), 
        NULLIF(address3, ''), 
        NULLIF(town, ''), 
        NULLIF(postcode, '')))))) AS concatedAddress FROM tblAddress; 
+0

Je n'attends pas la meilleure réponse, je teste à mesure qu'ils arrivent, et ils arrivent rapidement. Je répondrai dès que j'aurai fini de tester et pourra confirmer le bon. – user3411176

+0

J'ai maintenant testé cela et peut confirmer que cela fonctionne. Il a juste besoin d'une légère modification d'ajouter une virgule après le housename. Merci pour votre temps à résoudre cela pour moi. Très apprécié. – user3411176

+0

vous êtes les bienvenus @ user3411176. continuer à coder :) –

0

Utilisez concat_ws() (concaténation avec séparateur) avec nullif()

SELECT CONCAT_WS(',', NULLIF(housename, ''), 
         NULLIF(housenumber, ''), 
         NULLIF(address1, ''), 
         NULLIF(address2, ''), 
         NULLIF(address3, ''), 
         NULLIF(town, ''), 
         NULLIF(postcode, '') 
     ) AS address FROM tblAddress 
+0

Cela se traduira par 'Banana House, 29, Route Acacia ...' 'topicstarter a demandé Banana House, 29 Acacia route ...' –

+0

Désolé, je raté ce point, Amruth LS a la bonne réponse – MrCarrot

0

Essayez comme ci-dessous,

SELECT CONCAT_WS (", ", 
    housename, 
    CONCAT(housenumber, CONCAT_WS (", ", NULLIF(address1, ''), NULLIF(address2, ''), NULLIF(address3, ''))), 
    town, 
    postcode) AS address 
FROM tblAddress 
0

Que diriez-vous ceci:

SELECT 
     housename 
     ,CONCAT(housenumber, CONCAT(' ', COALESCE(address1, '')), CONCAT(' ', COALESCE(address2, '')), CONCAT(' ', COALESCE(address3, ''))) AS address 
     ,town 
     ,postcode 
FROM tblAddress;