MySQL SELECT 条件 CONCAT

MySQL SELECT Conditional CONCAT

我有一个基本上保存地址的数据库

table (tblAddress) 看起来像这样...

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

当我根据邮政编码搜索数据库时,我希望能够 return 并得到这样的结果...

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

因此,如果填充了地址 1,我需要将门牌号与地址 1 连接起来。如果不是,则与 address2 或 address3 连接。然后根据示例遵循其余地址。

我尝试使用 IF 和 CASE 语句,但似乎无法接近我想要的输出。

希望这是有道理的。

使用 concat_ws()(带分隔符的串联)和 nullif()

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

像下面这样尝试,

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

您可以通过添加一些连接操作来完成。

检查下面的代码它应该工作。

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

这个怎么样:

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