MySQL连接字段但忽略空字段

Posted

技术标签:

【中文标题】MySQL连接字段但忽略空字段【英文标题】:MySQL concatenating fields but ignoring empty ones 【发布时间】:2011-01-21 12:31:56 【问题描述】:

我有一个 mysql 数据库,其中包含人员列表,包括他们的地址,我想将其作为查询中的一个字段返回。它分为address1, address2, address3, address4, post_code,我想做如下的事情

SELECT CONCAT(`address1`, ' ',  `address2`, ' ', `address3`, ' ', `address4`, ' ', `post_code`) AS `address` FROM `table`

所以我最终会在address 中得到他们地址的完整字符串,这很好用,但如果某些字段为空,那么我最终会得到很多双空格。如何消除多余的空格?有没有比在每个字段上执行 IF() 更简单的方法?

【问题讨论】:

【参考方案1】:
SELECT  CONCAT_WS(' ',  NULLIF(address1, ''),  NULLIF(address2, ''),  NULLIF(address3, ''),  NULLIF(address4, ''),  NULLIF(post_code, ''))
FROM    table

如果您的空字段实际上是NULL,您可以省略NULLIF 构造:

SELECT  CONCAT_WS(' ',  address1, address2, address3, address4, post_code)
FROM    table

【讨论】:

【参考方案2】:

使用 CONCAT_WS 代替 CONCAT

SELECT CONCAT_WS(' ',`address1`, `address2`,  `address3`,  `address4`,  `post_code`) AS `address` 
FROM `table`;

【讨论】:

【参考方案3】:

您也可以使用 COALESCE 来代替 IFNULL,它是为此任务而设计的。

【讨论】:

以上是关于MySQL连接字段但忽略空字段的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 左连接时,查询条件查询某个字段为空或者为特定值解决方案

MySQL 左连接时,查询条件查询某个字段为空或者为特定值解决方案

48. 访问MySql数据库增删改查和连接池及空字段处理 | 厚土Go学习笔记

php判断mysql数据库是不是为空

MySQL如何在两个字段上连接表

mysql连接查询,封装mysql函数