如果列不为null,则为SQL CONCAT

时间:2015-08-05 07:58:52

标签: php mysql

我正在使用此SELECT查询:

SELECT sequence, company,
    CONCAT(address1, '\r', address2, '\r', address3, '\r', town, '\r', county, '\r', postcode) AS address
FROM customer
WHERE company_status = 'Customer'
ORDER BY company ASC

但有时,某些地址列可能为空/空,因此我不想包含它们

我在PHP中使用此查询,所以我尝试过:

str_replace(array("\r","\n"), '', $result["address"])

但这只是删除地址之间的所有换行符,如何只删除空行?

3 个答案:

答案 0 :(得分:3)

只需添加条件 -

CONCAT(IF(address1 IS NOT NULL, CONCAT(address1, '\r'), ''), IF(address2 IS NOT NULL, CONCAT(address2, '\r'), ''), .... 

答案 1 :(得分:0)

这样的东西?

$addressArr = array();
if (isset($result["address"])){
foreach ($result["address"] as $address) {
     if ($address) {
     $addressArr = $address;
     }
}
}
var_dump($addressArr);

答案 2 :(得分:0)

如果修改选择状态并使用控制流函数IFNULL,则可以测试列是否为空,如果是,则使用''作为此的返回值。此外,您需要在IFNULL语句的第一个参数内再次连接,以便仅在\r不为空时才显示address1

SELECT sequence, 
       company, 
       CONCAT(IFNULL(CONCAT(address1, '\r'),''), IFNULL(CONCAT(address2, '\r'),''), IFNULL(CONCAT(address3, '\r'),''), town, '\r', county, '\r', postcode) as address 
   FROM customer 
   WHERE company_status = 'Customer' 
   ORDER BY company A

最后,您会注意到数据库中不支持empty文本。这是因为它被认为是一个糟糕的设计,同时拥有空字段和空字段。让我们解决这个问题吧。

UPDATE customer SET address1=NULL WHERE MyColumn='';

只需为地址列运行此命令即可。然后将列的默认值设置为null。