生死看淡,上来就干!

简单来说,Mysql中的字符串拼接函数主要有三个,分别是CONCAT()、CONCAT_WS()以及GROUP_CONCAT();废话不多说,下面就每个函数具体来看一下:

1、CONCAT()函数

该函数的标准格式应为CONCAT(str1,str2,…),可以有多个参数,Mysql官方手册上对该函数的描述是 Return concatenated string,
即返回串联的字符串。其实说白了就是对所有参数不加任何修饰的连接到一块,
如下sql所示:

mysql>    SELECT CONCAT("My","sql","plus");
+---------------------------+
| CONCAT("My","sql","plus") |
+---------------------------+
| Mysqlplus                 |
+---------------------------+
1 row in set (0.01 sec)可以再增加一个参数看下效果:mysql>   SELECT CONCAT("My","sql","plus","Apple");
+-----------------------------------+
| CONCAT("My","sql","plus","Apple") |
+-----------------------------------+
| MysqlplusApple                    |
+-----------------------------------+
1 row in set (0.00 sec)
参数理论上可以无限增加,但是我想肯定不会有人这么干,按需求来就好。
CONCAT(str1,str2,...)函数中如果有一个参数为NULL,那么返回的结果就是NULL,如下语句所示:
mysql>    SELECT CONCAT("My","sql",NULL,"Apple");
+---------------------------------+
| CONCAT("My","sql",NULL,"Apple") |
+---------------------------------+
| NULL                            |
+---------------------------------+
1 row in set (0.00 sec)

在实际工作中按需使用即可。

2、CONCAT_WS()函数

该函数的标准格式应为CONCAT_WS(separator,str1,str2,…),
Mysql官方手册上对该函数的描述是Return concatenate with separator,
即返回用分隔符连接后的字符串,
它其实是函数 CONCAT(str1,str2,…)的一种特殊形式,CONCAT_WS()函数的第一个参数是其余参数的分隔符,分隔符被添加到要连接的字符串之间。分隔符可以是字符串,其他参数也可以是字符串。如果分隔符为NULL,则结果为NULL。如下所示:

mysql>    SELECT CONCAT_WS("::","sql","plus","Apple");
+--------------------------------------+
| CONCAT_WS("::","sql","plus","Apple") |
+--------------------------------------+
| sql::plus::Apple                     |
+--------------------------------------+
1 row in set (0.00 sec)mysql>    SELECT CONCAT_WS(NULL,"sql","plus","Apple");
+--------------------------------------+
| CONCAT_WS(NULL,"sql","plus","Apple") |
+--------------------------------------+
| NULL                                 |
+--------------------------------------+
1 row in set (0.00 sec)

CONCAT_WS()不跳过空字符串。但是,它会跳过分隔符参数之后的任何空值。如下所示:

mysql>    SELECT CONCAT_WS("-","My",NULL,"Sql"," ","Plus");
+-------------------------------------------+
| CONCAT_WS("-","My",NULL,"Sql"," ","Plus") |
+-------------------------------------------+
| My-Sql- -Plus                             |
+-------------------------------------------+
1 row in set (0.00 sec)

上面示例中CONCAT_WS()函数忽略了NULL值,但是" "没有忽略,这是在使用中需要注意的地方。

3、GROUP_CONCAT()函数

该函数主要用于分组查询中,返回一个字符串数据,其中包含组中连接的非空值。如果没有非空值,则返回空值。 单看这些描述,感觉是有点摸不着头脑,不过不用着急,结合示例就会恍然大悟了。
查看示例之前首先看下语法结构:

GROUP_CONCAT([DISTINCT] expr [,expr ...][ORDER BY {unsigned_integer | col_name | expr}[ASC | DESC] [,col_name ...]][SEPARATOR str_val])

没错,GROUP_CONCAT()函数的参数可以是sql中相应的表达式,可以包含DISTINCT关键字ORDER BY排序等等。看下具体示例:
新建表结构如图所示

具体需求是在部门表中找到所有部门人数相同的部门的ID并拼接成字符串:

mysql> SELECT nums,count( 1 ) total,GROUP_CONCAT(dname),## 默认使用的是逗号分隔GROUP_CONCAT( DISTINCT deptno ORDER BY deptno DESC SEPARATOR "-" ) AS deptNo #以"-"分隔,并按照deptno降序排列
FROM dept GROUP BY nums HAVING total > 1;
+------+-------+-----------------------+--------+
| nums | total | GROUP_CONCAT(dname)   | deptNo |
+------+-------+-----------------------+--------+
| NULL |     2 | IT运维,公关部           | 10-9   |
|   10 |     2 | 财务部,市场部           | 4-3    |
|   15 |     2 | 运维部,大数据           | 8-5    |
|   20 |     2 | 研发部,人事部           | 2-1    |
|   30 |     2 | 技术部,bigdata2018     | 7-6    |
+------+-------+-----------------------+--------+
5 rows in set (0.00 sec)

还记的上面描述中所说的“如果没有非空值,则返回空值。”吗?deptno为9和10的数据 nums字段为NULL,也就是为空值,换句话说就是没有非空的值,则最终返回的结果为NULL值。在对比一下deptno为1~8的数据,应该就能明白了。

聊一聊Mysql中的字符串拼接函数相关推荐

  1. Oracle和Mysql中的字符串的拼接

    SQL允许两个或者多个字段之间进行计算,字符串类型的字段也不例外.比如我们需要 以"工号+姓名"的方式在报表中显示一个员工的信息,那么就需要把工号和姓名两个字符 串类型的字段拼接计 ...

  2. java:去除字符串中空格 、 oracle (+) 、 mysql中数值运算符和函数

    java:去除字符串中空格 http://www.cnblogs.com/LiuChunfu/p/5661810.html oracle:oracle (+) https://zhidao.baidu ...

  3. mysql 触发器拼接字符串_触发器 字符串拼接函数

    ##触发器 触发时间 before after 触发事件 insert update delete 等 create table score_log select * from score where ...

  4. MySQL中常见的单行函数(下)

    MySQL中常见的单行函数(下) 一.转换函数 Date_format(date,format) 将日期转换成字符串(类似Oracle中的to_char()) Str_to_date(str,fo ...

  5. MySQL中常用日期时间函数及获得

    MySQL中常用日期时间函数: 下面的查询选择了所有记录,其date_col的值是在最后30天以内: mysql> SELECT something FROM table WHERE TO_DA ...

  6. mysql中生成字符串对应的英文字母(拼音首字母)

    mysql中生成字符串对应的英文字母(拼音首字母)的存储过程,触发器和函数 1.规则 1.1.输入字符串长度255(可变),输出字符串10(可变) 1.2.对于全英文字母或数字,输出空格后的首字符,均 ...

  7. Go 语言中的字符串拼接

    目录 1. 通过 + 号连接两个字符串 2. 使用 sprintf 函数 3. 使用 Join 函数 4. 使用 bytes.Buffer 的 WriteString 函数 5. 使用 buffer. ...

  8. Go语言中的字符串拼接方法介绍

    本文介绍Go语言中的string类型.strings包和bytes.Buffer类型,介绍几种字符串拼接方法. 目录 string类型 strings包 strings.Builder类型 strin ...

  9. c语言中有裁剪字符串的函数吗,C语言中的字符串截取函数

    /*======================================================== 子数整数 源程序名 num.??? (pas,c,cpp) 可执行文件名 num. ...

最新文章

  1. Gradient Descent和Back propagation在做什么?
  2. java高淇_高淇java300集JAVA常用类作业
  3. java开源网络服务器端组件_OpenNMS - 网络服务器端组件 - 组件类库 - JAVA开源项目 - 开源吧...
  4. react native 中下拉列表FlatList组件的讲解以及实例demo
  5. R语言 非中心化F分布
  6. java实现的小程序_Java实现 微信小程序 + 消息推送
  7. oracle sysdate 截取年月日,oracle中extract()函数----用于截取年、月、日、时、分、秒...
  8. 常人不解朱啸虎,读懂已是被裁人
  9. 推荐系统(Recommendation system )
  10. Anaconda3 + Python3.6 + PyTorch0.4.0 安装步骤
  11. QThread的用法
  12. Flak——跨域问题解决
  13. 如何实现一款好用的云图(word-cloud)生成工具?
  14. 养成好习惯,戒掉坏习惯
  15. stm32开发3D打印机(二)——方向、相关资料链接
  16. 美国食品药品监督管理局支持公开数据共享原则
  17. ferguson博弈_人物介绍!扑克界传奇人物“耶稣”Chris Ferguson
  18. 虚拟信用卡(VCC)对比实体信用卡有哪些特点和优势?
  19. 常用的重试技术—如何优雅的重试(Spring-Retry)等
  20. spring-data-mongodb依赖的spring版本

热门文章

  1. 微信jssdk签名java_JAVA生成微信JSSDK接口签名
  2. SecureCRT记录日志的快捷键
  3. 混合办公说来就来,你找到适合的安全防护产品了么
  4. 深度学习网络每一层维度_每个人都可以使用深度学习
  5. Springboot毕设项目家政服务管理系统w6nqajava+VUE+Mybatis+Maven+Mysql+sprnig)
  6. 迭代和递归的理解和区别
  7. python量化实战_Python与量化投资 从基础到实战.pdf
  8. 看完鹅厂学长这篇后台服务器高性能总结,秋招收割BAT offer~
  9. github上值得推荐的大神
  10. 4-4模拟赛 囚人的旋律——DP