2017-10-05 2 views
1

Ich habe eine Datenbank, die im Grunde AdressenMySQL SELECT Conditional CONCAT

hält

Die Tabelle (tblAddress) sieht wie folgt aus ...

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

Wenn ich die Datenbank suchen, basierend auf einer Postleitzahl ich sein will der Lage, wie dies zurück und führen ...

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

Also muss ich die Hausnummer mit address1 verketteten IF address1 bevölkert ist. Wenn nicht, dann concat mit Adresse2 oder Adresse3. Dann folgt der Rest der Adresse gemäß dem Beispiel.

Ich versuchte, IF und CASE-Anweisungen zu verwenden, aber ich kann nicht scheinen, in der Nähe der Ausgabe, nach der ich bin, zu kommen.

Hoffnung, die Sinn macht.

Antwort

2

Sie können es wenige concat Operationen durch Zugabe.

Überprüfen Sie unten Code es sollte funktionieren.

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

Ich warte nicht auf die beste Antwort, ich teste, wie sie kommen, und sie kommen schnell herein. Ich werde antworten, sobald ich mit dem Testen fertig bin und den richtigen bestätigen kann. – user3411176

+0

Ich habe das jetzt getestet und kann bestätigen, dass es funktioniert. Es braucht nur eine kleine Änderung, um ein Komma nach dem Hausnamen hinzuzufügen. Vielen Dank für Ihre Zeit bei der Lösung dieses Problems für mich. Sehr geschätzt. – user3411176

+0

Sie sind willkommen @ user3411176. weiter codieren :) –

0

Verwendung concat_ws() (Verkettung mit Trennzeichen) zusammen mit nullif()

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

Das in 'Banana House, 29, Acacia Straße führen wird ...' topicstarter für 'Banana House, 29 Acacia Straße ...' –

+0

Leider fragte ich verpasste diesen Punkt, Amruth LS hat die richtige Antwort – MrCarrot

0

wie unten Versuchen Sie,

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

Wie wäre es damit:

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