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区别及使用场景相关推荐

  1. mysql中字符串拼接函数_MySQL 字符串连接CONCAT()函数

    MySQL字符串连接函数 使用方法: CONCAT(str1,str2,-) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意: 如果所有参数均为非二进制字符 ...

  2. mysql concat 变量_MySQL 字符串连接CONCAT()函数

    MySQL字符串连接函数 使用方法: CONCAT(str1,str2,-) 返回结果为连接参数产生的字符串.如有任何一个参数为NULL ,则返回值为 NULL. 注意: 如果所有参数均为非二进制字符 ...

  3. MySQL 字符串拼接 concat、concat_ws、lpad、rpad、group_concat

    MySQL中实现字符串拼接有以下几种方法:concat.concat_ws.lpad.rpad.group_concat,他们分别适用拼接字符串.用分隔符拼接.按照分组拼接.拼接后保留n位字符等不同场 ...

  4. 详解MySQL字符串函数CONCAT()、CONCAT_WS()、INSERT()、REPLACE()、LOWER()、UPPER()用法(二)

    文章目录 一.合并字符串函数CONCAT()和CONCAT_WS() 1.CONCAT() 2.CONCAT_WS() 二.替换字符串INSERT()和REPLACE 1.INSERT() 2.REP ...

  5. MySQL中函数CONCAT及GROUP_CONCAT

    一.CONCAT()函数 CONCAT()函数用于将多个字符串连接成一个字符串. 使用数据表Info作为示例,其中SELECT id,name FROM info LIMIT 1;的返回结果为 +-- ...

  6. MySQL中函数CONCAT及GROUP_CONCAT 对应oracle中的wm_concat

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 一.CONCAT()函数 CONCAT()函数用于将多个字符串连接成一个字符串. 使用数据表Info ...

  7. MySQL教程之concat以及group_concat的用法

    本文中使用的例子均在下面的数据库表tt2下执行: 一.concat()函数 1.功能:将多个字符串连接成一个字符串. 2.语法:concat(str1, str2,...) 返回结果为连接参数产生的字 ...

  8. 简单的mysql左链接_简单谈谈mysql左连接内连接

    前言 最近忙着开发x省冷链追溯系统,天天干到晚上十一点多才回到家,周末也加班,没啥时间写博客,闲下来再好好写写 业务: sql语句统计出入库数据. 问题:只统计了X端入库单. 原因: 没有发现X端的数 ...

  9. MySQL什么用于左连接_简单谈谈mysql左连接内连接

    前言 最近忙着开发x省冷链追溯系统,天天干到晚上十一点多才回到家,周末也加班,没啥时间写博客,闲下来再好好写写 业务: sql语句统计出入库数据. 问题:只统计了X端入库单. 原因: 没有发现X端的数 ...

  10. Mysql的concat concat_ws group_concat

    原文https://baijiahao.baidu.com/s?id=1595349117525189591&wfr=spider&for=pc concat:concat(str1, ...

最新文章

  1. 用邮箱实现多事件的单向同步
  2. 数据库原理上机实验内容报告代码
  3. POI创建的文档具有不同条件的灵活样式
  4. sql插入临时表数据的方法
  5. 双网卡主机配置oracle监听,VirtualBox设置双网卡实现虚机上网及主宿机互访
  6. 小书童——密码(洛谷-P1914)
  7. 排序 oracle,oracle排序
  8. Oct.31, 2011-减肥第一天
  9. Atitit 常见的bpmn事件类型与触发机制 目录 1. 事件定义概述 2 2. 按照事件的位置分类 2 2.1. 对事件按照位置进行分类,主要可分为开始事件、中间事件和结束事件, 2 3. 按照
  10. paip.提升安全性----软键盘的弱点
  11. 转发-神器|最强电脑搜索神器(啥都能搜!!!)
  12. 中国石油大学远程教育《应急救援概论》第一阶段在线作业
  13. set_set_switching_activity
  14. 《经营者养成笔记》读后感
  15. 电脑文件丢失你都是怎么找回来的?
  16. win10修改和隐藏系统输入法指示器
  17. 服务器显示ipv4有两个ip地址,ipconfig命令后为什么出现两个IPV4地址?
  18. 错误使用 load ASCII 文件的行号 1 中的文本未知“MATLAB“。
  19. Elasticsearch常用配置及性能参数
  20. 8种常见液相色谱异常峰

热门文章

  1. Spark :Web UI详解
  2. 使用node实现简单的增删改查功能的小demo
  3. 数学分析对计算机有帮助吗,计算机辅助数学分析教学的好处
  4. python绘制复杂表格_Matplotlib绘制表格
  5. 计算机机械制图试题及答案,机械制图及计算机绘图试卷和参考答案1.pdf
  6. 14期 《星星之火,可以燎原》4月刊
  7. python爬虫实训总结报告_python爬虫简单总结(一)
  8. 【RDMA】ibv_modify_qp()
  9. @Insert的用法
  10. android的筛选功能,android实现筛选菜单效果