谈谈Mysql 字符串连接 CONCAT CONCAT_WS GROUP_CONCAT区别及使用场景
Mysql数据库中字符串连接有3个常用函数:CONCAT、CONCAT_WS和GROUP_CONCAT,其中CONCAT、CONCAT_WS类似,而GROUP_CONCAT顾名思义是一个集合操作函数,本文谈谈三者区别及使用场景,同时分享一个Demo,用GROUP_CONCAT如何实现将细表物料名称汇总到主表物料详情。
1、CONCAT()
注意:returns NULL if any argument is NULL.
mysql> SELECT CONCAT('My', 'S', 'QL'); -> 'MySQL'
mysql> SELECT CONCAT('My', NULL, 'QL'); -> NULL
mysql> SELECT CONCAT('My', '', 'SQL'); -> 'MySQL'
mysql> SELECT CONCAT(14.3); -> '14.3'
2、CONCAT_WS(separator,str1,str2,…)
我们可以简单理解:CONCAT = CONCAT_WS(’’, str1, str2, …),但两者又有差别,主要在null参数处理上。
- CONCAT函数,只要参数有null,则返回null
- CONCAT_WS,参数有null,则会跳过null,继续连接下个参数,但是分隔符若为null,则返回null
mysql> SELECT CONCAT_WS(',','First name','Second name','Last Name'); -> 'First name,Second name,Last Name'
mysql> SELECT CONCAT_WS(',','First name',NULL,'Last Name'); -> 'First name,Last Name'
mysql> SELECT CONCAT_WS(null,'First name',NULL,'Last Name'); -> NULL
mysql> SELECT CONCAT_WS(null,'First name','Last Name'); -> NULL
mysql> SELECT CONCAT_WS(',',null,null) = ''; -> 1, true
3、GROUP_CONCAT(expr)
GROUP_CONCAT(expr),返回符合要求结果集的字符串拼接,返回字符串有几个特点:
- 默认逗号分隔
- 默认长度最大 1024,超过部分自动截断,可通过SET [GLOBAL | SESSION] group_concat_max_len = val修改。
- NULL值跳过
GROUP_CONCAT(expr) 语法:
GROUP_CONCAT([DISTINCT] expr [,expr ...]
[ORDER BY {unsigned_integer | col_name | expr}
[ASC | DESC] [,col_name ...]] [SEPARATOR str_val])
GROUP_CONCAT,具体如何使用,看一个Demo:如何将细表物料名称汇总到主表物料详情。
4、Demo讲解
1)准备2张表:采购单主表,采购单细表
**采购单主表,pur_po_bill **
sid | goods_name |
---|---|
323 | 奶嘴黄色PP礼袋条码,营养餐208套标 |
324 | 小奶嘴盖_Yellow C |
325 | 奶嘴黄色PP礼袋条码,浓缩番茄汁 |
**采购单细表,pur_po_bill_detail **
sid | bill_id | goods_name | memo |
---|---|---|---|
1 | 323 | 奶嘴黄色PP礼袋条码 | |
2 | 323 | 营养餐208套标 | |
3 | 323 | 营养餐208套标 |
实际情况物料不能重复,为了 函数说明需要特意修改 |
4 | 324 | 小奶嘴盖_Yellow C | |
4 | 325 | 奶嘴黄色PP礼袋条码 | |
5 | 325 | 浓缩番茄汁 |
GROUP_CONCAT 演示1
SELECT bill_id, GROUP_CONCAT(goods_name)
FROM pur_po_bill_detail
WHERE bill_id in(323,324,325)
GROUP BY bill_id;
sql输出结果:
bill_id | GROUP_CONCAT(goods_name) |
---|---|
323 | 奶嘴黄色PP礼袋条码,营养餐208套标,营养餐208套标 |
324 | 小奶嘴盖_Yellow C |
325 | 奶嘴黄色PP礼袋条码,浓缩番茄汁 |
GROUP_CONCAT 演示2
SELECT bill_id, GROUP_CONCAT(DISTINCT goods_name order by CONVERT(goods_name USING gbk) asc SEPARATOR '@')
FROM pur_po_bill_detail
WHERE bill_id in(323,324,325)
GROUP BY bill_id;
sql输出结果:
bill_id | GROUP_CONCAT(goods_name) |
---|---|
323 | 奶嘴黄色PP礼袋条码@营养餐208套标 |
324 | 小奶嘴盖_Yellow C |
325 | 奶嘴黄色PP礼袋条码@浓缩番茄汁 |
sql 说明:
1)指定了分隔符,SEPARATOR ‘@’
2)指定了排序
3)DISTINCT goods_name 区重处理
GROUP_CONCAT 演示3
将细表物料名称,更新到主表物料名称。
update pur_po_bill a
set a.goods_name = (select GROUP_CONCAT(goods_name) from pur_po_bill_detail b where b.bill_id = a.sid)
where a.sid in (323,324,325)
sql 结果见 采购单主表pur_po_bill数据。
谈谈Mysql 字符串连接 CONCAT CONCAT_WS GROUP_CONCAT区别及使用场景相关推荐
- mysql中字符串拼接函数_MySQL 字符串连接CONCAT()函数
MySQL字符串连接函数 使用方法: CONCAT(str1,str2,-) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意: 如果所有参数均为非二进制字符 ...
- mysql concat 变量_MySQL 字符串连接CONCAT()函数
MySQL字符串连接函数 使用方法: CONCAT(str1,str2,-) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意: 如果所有参数均为非二进制字符 ...
- MySQL 字符串拼接 concat、concat_ws、lpad、rpad、group_concat
MySQL中实现字符串拼接有以下几种方法:concat.concat_ws.lpad.rpad.group_concat,他们分别适用拼接字符串.用分隔符拼接.按照分组拼接.拼接后保留n位字符等不同场 ...
- 详解MySQL字符串函数CONCAT()、CONCAT_WS()、INSERT()、REPLACE()、LOWER()、UPPER()用法(二)
文章目录 一.合并字符串函数CONCAT()和CONCAT_WS() 1.CONCAT() 2.CONCAT_WS() 二.替换字符串INSERT()和REPLACE 1.INSERT() 2.REP ...
- MySQL中函数CONCAT及GROUP_CONCAT
一.CONCAT()函数 CONCAT()函数用于将多个字符串连接成一个字符串. 使用数据表Info作为示例,其中SELECT id,name FROM info LIMIT 1;的返回结果为 +-- ...
- MySQL中函数CONCAT及GROUP_CONCAT 对应oracle中的wm_concat
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 一.CONCAT()函数 CONCAT()函数用于将多个字符串连接成一个字符串. 使用数据表Info ...
- MySQL教程之concat以及group_concat的用法
本文中使用的例子均在下面的数据库表tt2下执行: 一.concat()函数 1.功能:将多个字符串连接成一个字符串. 2.语法:concat(str1, str2,...) 返回结果为连接参数产生的字 ...
- 简单的mysql左链接_简单谈谈mysql左连接内连接
前言 最近忙着开发x省冷链追溯系统,天天干到晚上十一点多才回到家,周末也加班,没啥时间写博客,闲下来再好好写写 业务: sql语句统计出入库数据. 问题:只统计了X端入库单. 原因: 没有发现X端的数 ...
- MySQL什么用于左连接_简单谈谈mysql左连接内连接
前言 最近忙着开发x省冷链追溯系统,天天干到晚上十一点多才回到家,周末也加班,没啥时间写博客,闲下来再好好写写 业务: sql语句统计出入库数据. 问题:只统计了X端入库单. 原因: 没有发现X端的数 ...
- Mysql的concat concat_ws group_concat
原文https://baijiahao.baidu.com/s?id=1595349117525189591&wfr=spider&for=pc concat:concat(str1, ...
最新文章
- 用邮箱实现多事件的单向同步
- 数据库原理上机实验内容报告代码
- POI创建的文档具有不同条件的灵活样式
- sql插入临时表数据的方法
- 双网卡主机配置oracle监听,VirtualBox设置双网卡实现虚机上网及主宿机互访
- 小书童——密码(洛谷-P1914)
- 排序 oracle,oracle排序
- Oct.31, 2011-减肥第一天
- Atitit 常见的bpmn事件类型与触发机制 目录 1. 事件定义概述	2 2. 按照事件的位置分类	2 2.1. 对事件按照位置进行分类,主要可分为开始事件、中间事件和结束事件,	2 3. 按照
- paip.提升安全性----软键盘的弱点
- 转发-神器|最强电脑搜索神器(啥都能搜!!!)
- 中国石油大学远程教育《应急救援概论》第一阶段在线作业
- set_set_switching_activity
- 《经营者养成笔记》读后感
- 电脑文件丢失你都是怎么找回来的?
- win10修改和隐藏系统输入法指示器
- 服务器显示ipv4有两个ip地址,ipconfig命令后为什么出现两个IPV4地址?
- 错误使用 load ASCII 文件的行号 1 中的文本未知“MATLAB“。
- Elasticsearch常用配置及性能参数
- 8种常见液相色谱异常峰
热门文章
- Spark :Web UI详解
- 使用node实现简单的增删改查功能的小demo
- 数学分析对计算机有帮助吗,计算机辅助数学分析教学的好处
- python绘制复杂表格_Matplotlib绘制表格
- 计算机机械制图试题及答案,机械制图及计算机绘图试卷和参考答案1.pdf
- 14期 《星星之火,可以燎原》4月刊
- python爬虫实训总结报告_python爬虫简单总结(一)
- 【RDMA】ibv_modify_qp()
- @Insert的用法
- android的筛选功能,android实现筛选菜单效果