广告位联系
返回顶部
分享到

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

Mysql 来源:互联网 作者:佚名 发布时间:2024-07-18 18:56:56 人浏览
摘要

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

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

一、concat()

1、准备一张test_concat表

1

2

3

4

5

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、插入一些数据

1

2

3

4

5

6

7

8

9

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

1

SELECT * FROM test_concat;

在这里插入图片描述

1

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

在这里插入图片描述

出现了null值。。。

4、解决方式

1

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

在这里插入图片描述

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

继续往下看

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

1

2

3

4

5

6

7

8

9

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,而是显示一片空白。

1

2

3

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)。

1

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;

使用示例:

1

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

在这里插入图片描述

1

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

在这里插入图片描述

1

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

在这里插入图片描述


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计