2017-10-05 85 views
1

我有这基本上保持地址MySQL的SELECT CONCAT条件

数据库

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

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

当我搜索基于一个邮政编码我想成为数据库能够返回和结果是这样的...

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

所以我需要housenumber与地址1连接如果地址1填充。如果不是,则用地址2或地址3连接。然后按照示例的其余地址。

我尝试使用IF和CASE语句,但似乎无法得到任何接近我后的输出。

希望是有道理的。

回答

2

您可以通过添加少量的concat操作做到这一点。

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

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

我不是在等待最佳答案,我在测试他们进来时,他们快速进入。我会在完成测试后立即回复并确认正确的答案。 – user3411176

+0

我现在已经测试过了,可以确认它的工作原理。只需稍作修改就可以在房屋名称后添加逗号。感谢您为我解决这个问题。非常感谢。 – user3411176

+0

欢迎您@ user3411176。继续编码:) –

0

使用concat_ws()(串联与分离器)以及nullif()

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

这将导致'香蕉楼,29,合欢路...'topicstarter问'香蕉楼,29路合欢...' –

+0

对不起我错过了这一点,Amruth LS有正确的答案 – MrCarrot

0

尝试像下面,

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

如何:

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