当前位置: 首页 > news >正文

Mysql 函数concat、concat_ws和group_concat


1.concat 
concat()函数是将多个字符串组合在一起,形成一个大的字符串;如果连接的字符串中存在一个为NULL,则输出的结果为NULL,语法格式为:
concat(str1,str2,....strn)

-- 1、字符之间不加连接符
mysql> select concat("01","赵雷","男");
+-----------------------------+
| concat("01","赵雷","男")    |
+-----------------------------+
| 01赵雷男                    |
+-----------------------------+
1 row in set (0.00 sec)-- 2、字符之间添加连接符
mysql> select concat("01-","赵雷-","男");
+-------------------------------+
| concat("01-","赵雷-","男")    |
+-------------------------------+
| 01-赵雷-男                    |
+-------------------------------+
1 row in set (0.00 sec)-- 3、忽略空字符串
mysql> mysql> select concat("01","赵雷","","男");
+--------------------------------+
| concat("01","赵雷","","男")    |
+--------------------------------+
| 01赵雷男                       |
+--------------------------------+
1 row in set (0.00 sec)-- 4、存在NULL的情况
mysql> select concat("01","赵雷",NULL,"男");  -- 结果直接显示为NULL
+----------------------------------+
| concat("01","赵雷",NULL,"男")    |
+----------------------------------+
| NULL                             |
+----------------------------------+
1 row in set (0.01 sec)

上面的NULLMySQLNULL,如果NULL本身就是字符串,则结果不相同:

mysql> select concat("01","赵雷","NULL","男");
+------------------------------------+
| concat("01","赵雷","NULL","男")    |
+------------------------------------+
| 01赵雷NULL男                       |
+------------------------------------+
1 row in set (0.01 sec)

2.concat_ws
concat_ws()函数相比较于concat()多了一个指定的连接符号,语法为:
concat_ws(separator, str1, str2, str3)

-- 1、指定不同的连接符号:分别指定逗号和加号mysql> select concat_ws(",","01","赵雷","男");
+------------------------------------+
| concat_ws(",","01","赵雷","男")    |
+------------------------------------+
| 01,赵雷,男                         |
+------------------------------------+
1 row in set (0.00 sec)mysql> select concat_ws("+","01","赵雷","男");
+------------------------------------+
| concat_ws("+","01","赵雷","男")    |
+------------------------------------+
| 01+赵雷+男                         |
+------------------------------------+
1 row in set (0.00 sec)-- 2、不忽略空字符串
mysql> select concat_ws("+","01","赵雷","","男");
+---------------------------------------+
| concat_ws("+","01","赵雷","","男")    |
+---------------------------------------+
| 01+赵雷++男                           |
+---------------------------------------+
1 row in set (0.00 sec)-- 3、忽略NULL;不管几个NULL都会忽略
mysql> select concat_ws("+","01","赵雷",NULL,"男");
+-----------------------------------------+
| concat_ws("+","01","赵雷",NULL,"男")    |
+-----------------------------------------+
| 01+赵雷+男                              |
+-----------------------------------------+
1 row in set (0.00 sec)-- 忽略两个NULL
mysql> select concat_ws("+","01",NULL,"赵雷",NULL,"男");
+----------------------------------------------+
| concat_ws("+","01",NULL,"赵雷",NULL,"男")    |
+----------------------------------------------+
| 01+赵雷+男                                   |
+----------------------------------------------+
1 row in set (0.00 sec)
3.group_concat

group:分组的意思;concat:连接。合起来就是分组连接,具体语法为:

GROUP_CONCAT(DISTINCT expression ORDER BY expression SEPARATOR sep);
  • DISTINCT子句用于在连接分组之前消除组中的重复值
  • ORDER BY 连接之前按升序或者降序排列。默认是升序
  • SEPARATOR指定在组中的值之间插入的文字值。如果不指定分隔符,则GROUP_CONCAT函数使用逗号()作为默认分隔符
  • 函数会自动忽略NULL值,如果所有的参数都是NULL,则结果返回NULL
  • GROUP_CONCAT函数返回二进制或非二进制字符串,取决于参数。 默认情况下,返回字符串的最大长度为1024。通过在SESSIONGLOBAL级别设置group_concat_max_len系统变量来扩展最大长度。
set session group_concat_max_len=18783847439738273;  -- 防止超出范围数据被截掉
-- 1、将每个学生的成绩单独列出来
mysql> select s_id, group_concat(s_score) from Score group by s_id;
+------+-----------------------+
| s_id | group_concat(s_score) |
+------+-----------------------+
| 01   | 80,90,96              |
| 02   | 70,60,80              |
| 03   | 80,81,85              |
| 04   | 50,40,30              |
| 05   | 76,87                 |
| 06   | 43,56                 |
| 07   | 89,94                 |
+------+-----------------------+
7 rows in set (0.01 sec)-- 2、指定连接符+
mysql> select s_id, group_concat(s_score separator "+") from Score group by s_id;
+------+-------------------------------------+
| s_id | group_concat(s_score separator "+") |
+------+-------------------------------------+
| 01   | 80+90+96                            |
| 02   | 70+60+80                            |
| 03   | 80+81+85                            |
| 04   | 50+40+30                            |
| 05   | 76+87                               |
| 06   | 43+56                               |
| 07   | 89+94                               |
+------+-------------------------------------+
7 rows in set (0.00 sec)-- 3、指定排序的字段
-- 分数s_score已经完成了排序(指定了降序);上面的结果不指定则默认是降序
mysql> select s_id, group_concat(distinct s_score order by s_score desc separator "+") from Score group by s_id;
+------+--------------------------------------------------------------------+
| s_id | group_concat(distinct s_score order by s_score desc separator "+") |
+------+--------------------------------------------------------------------+
| 01   | 96+90+80                                                           |
| 02   | 80+70+60                                                           |
| 03   | 85+81+80                                                           |
| 04   | 50+40+30                                                           |
| 05   | 87+76                                                              |
| 06   | 56+43                                                              |
| 07   | 94+89                                                              |
+------+--------------------------------------------------------------------+
7 rows in set (0.00 sec)-- 4、去重操作
-- distinct s_score表示对分数去重,取出每个学生的不同分数(表中每个学生的分数都不相同,结果同上)
mysql> select s_id, group_concat(distinct s_score order by s_score desc separator "+") from Score group by s_id;
+------+--------------------------------------------------------------------+
| s_id | group_concat(distinct s_score order by s_score desc separator "+") |
+------+--------------------------------------------------------------------+
| 01   | 96+90+80                                                           |
| 02   | 80+70+60                                                           |
| 03   | 85+81+80                                                           |
| 04   | 50+40+30                                                           |
| 05   | 87+76                                                              |
| 06   | 56+43                                                              |
| 07   | 94+89                                                              |
+------+--------------------------------------------------------------------+
7 rows in set (0.00 sec)

http://www.xdnf.cn/news/1023607.html

相关文章:

  • MySQL的对表对整库备份脚本
  • Elasticsearch 常用命令(未完成)
  • python中的文件操作处理:文本文件的处理、二进制文件的处理
  • 心之眼 豪华中文 免安 离线运行版
  • 大模型记忆相关(MemoryOs)
  • kafka Tool (Offset Explorer)使用SASL Plaintext进行身份验证
  • cinematic-gaussians
  • 【RAG+读代码】学术文档解析工具Nougat
  • DeepSeek 引领前端开发变革:AI 助力学习与工作新路径
  • 基于STM32手势识别智能家居系统
  • 抖音AI数字人对口型软件LatentSync最新版整合包,音频驱动口型讲话
  • echarts图封装 自动切换 大屏 swiper 切换里面放echarts图,注意不要开循环 否则出不来
  • 图像处理算法的学习笔记
  • SpringBoot的Web应用开发——Web缓存利器Redis的应用!
  • 【UEFI系列】PEI阶段讲解
  • 生产环境LVM存储降级方案
  • Python训练营---DAY53
  • Git 前后端 Java Vue 项目的 .gitignore 配置分享
  • Linux环境下安装和使用RAPIDS平台的cudf和cuml - pip 安装方法
  • java集合(八) ---- Vector 类
  • 电磁铁性能检测所需工具
  • DataGrip 安装和连接Mysql
  • Eslint、Prettier、.vscode 配置
  • 阳台光伏新风口!安科瑞ADL200N-CT/D16-WF防逆流电表精准护航分布式发电
  • NLP学习路线图(四十三):零样本学习
  • 分布式爬虫系统设计与实现:跨节点MySQL存储方案
  • 导出支付宝账单步骤
  • 3款工具打造递进图:快速入门与个性化定制的实用指南
  • 帆软报表超级链接将查询控件的参数传递到子页面查询控件上
  • 谷歌具身智能VLA大模型 —— Gemini Robotics : 将人工智能带入到物理世界