Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > MySQL CONCAT()空值

MySQL中CONCAT()函数出现值为空的问题及解决办法

作者:老周聊架构

项目中查询用到了concat()拼接函数,本文主要介绍了MySQL中CONCAT()函数出现值为空的问题及解决办法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

项目中用到了三个字段,需要对它们用concat() 函数进行拼接以及分组group by,下面一锅端了concat()的这个函数,有concat()concat_ws()和 group_concat() 字段拼接的用法,我们来自己造点数据,做个测试。

一、concat()

1、准备一张test_concat

CREATE TABLE `test_concat` (
  `id` int(11) NOT NULL,
  `name` varchar(25) default NULL,
  `age` int(5) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2、插入一些数据

INSERT INTO test_concat (id, NAME, age) 
VALUES
	(1, 'andy', 18),
	(1, 'bob', 20),
	(2, 'jack', 33),
	(2, NULL, 22),
	(3, 'riemann', 28),
  	(3, 'riemann', 28),
  	(1, 'bob', 20)

3、执行sql

SELECT * FROM test_concat;

在这里插入图片描述

SELECT CONCAT(id,name,age) FROM test_concat;

在这里插入图片描述

出现了null值。。。

4、解决方式

SELECT CONCAT(id,IFNULL(name,''),age) FROM test_concat;

在这里插入图片描述

要是name字段的值是空字符串会怎么样呢?

继续往下看

这时候插入的时候换成了空字符串 ' '

INSERT INTO test_concat (id, NAME, age) 
VALUES
	(1, 'andy', 18),
	(1, 'bob', 20),
	(2, 'jack', 33),
	(2, '', 22),
	(3, 'riemann', 28),
    (3, 'riemann', 28),
    (1, 'bob', 20)

在这里插入图片描述

没有显示null,而是显示一片空白。

SELECT CONCAT(id,IFNULL(name,''),age) FROM test_concat;

SELECT CONCAT(id, CASE WHEN name = '' or name is NULL THEN '' ELSE name END, age) FROM test_concat;

其实这两种方法都可以,第二种更严谨一些。

二、concat_ws()

使用函数CONCAT_WS()。使用语法为:CONCAT_WS(separator,str1,str2,…)

CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。

第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。函数会忽略任何分隔符参数后的 NULL 值。但是CONCAT_WS()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。

SELECT CONCAT_WS('-',id,name,age) FROM test_concat;

在这里插入图片描述

直接不需要判断为不为空,这种方式不会出现null值的情况!

三、group_concat()

GROUP_CONCAT([DISTINCT] expr [,expr …]

[ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] [,col …]]

[SEPARATOR str_val])

在 MySQL 中,你可以得到表达式结合体的连结值。通过使用 DISTINCT 可以排除重复值。如果希望对结果中的值进行排序,可以使用 ORDER BY 子句。

SEPARATOR 是一个字符串值,它被用于插入到结果值中。缺省为一个逗号 (","),可以通过指定 SEPARATOR “” 完全地移除这个分隔符。

可以通过变量 group_concat_max_len 设置一个最大的长度。在运行时执行的句法如下: SET [SESSION | GLOBAL] group_concat_max_len = unsigned_integer;

如果最大长度被设置,结果值被剪切到这个最大长度。如果分组的字符过长,可以对系统参数进行设置:SET @@global.group_concat_max_len=40000;

使用示例:

SELECT id, GROUP_CONCAT(name) FROM test_concat WHERE id in('1', '2') GROUP BY id;

在这里插入图片描述

SELECT id, GROUP_CONCAT(distinct name ORDER BY name DESC SEPARATOR '_') FROM test_concat WHERE id in('1', '2') GROUP BY id;

在这里插入图片描述

SELECT id, GROUP_CONCAT(CONCAT_WS(', ',name,age) ORDER BY name DESC SEPARATOR '. ') FROM test_concat WHERE id in('1', '2') GROUP BY id;

在这里插入图片描述

到此这篇关于MySQL中CONCAT()函数出现值为空的问题及解决办法的文章就介绍到这了,更多相关MySQL CONCAT()空值内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

您可能感兴趣的文章:
阅读全文