首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果列不为空,则SQL CONCAT

如果列不为空,则SQL CONCAT
EN

Stack Overflow用户
提问于 2015-08-05 15:58:52
回答 3查看 812关注 0票数 0

我使用这个SELECT查询:

代码语言:javascript
运行
复制
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

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

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

代码语言:javascript
运行
复制
str_replace(array("\r","\n"), '', $result["address"])

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

EN

回答 3

Stack Overflow用户

发布于 2015-08-05 16:01:50

只需添加条件-

代码语言:javascript
运行
复制
CONCAT(IF(address1 IS NOT NULL, CONCAT(address1, '\r'), ''), IF(address2 IS NOT NULL, CONCAT(address2, '\r'), ''), .... 
票数 3
EN

Stack Overflow用户

发布于 2015-08-05 16:04:05

像这样的东西?

代码语言:javascript
运行
复制
$addressArr = array();
if (isset($result["address"])){
foreach ($result["address"] as $address) {
     if ($address) {
     $addressArr = $address;
     }
}
}
var_dump($addressArr);
票数 0
EN

Stack Overflow用户

发布于 2015-08-05 16:07:57

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

代码语言:javascript
运行
复制
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文本。这是因为同时拥有空字段和空字段被认为是一个糟糕的设计。让我们来解决这个问题。

代码语言:javascript
运行
复制
UPDATE customer SET address1=NULL WHERE MyColumn='';

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31826640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档