MySQL字符串拼接(函数)

Posted 江南极客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL字符串拼接(函数)相关的知识,希望对你有一定的参考价值。

最近帮助处理数据,需要批量更新数据,遂上网查了查方法,在此记录一下。我的原始数据如下:

一.CONCAT()函数
    说明 : CONCAT(string1,string2,string3...),此处是直接把string1、string2和string3等等的字符串无缝拼接起来,返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。
    A.无缝衔接
    

    B.如果有一个值为NULL,则返回NULL


    
二.CONCAT_WS()函数
    说明 : CONCAT_WS(separator,string1,string2,string3...),此处是直接把string1、string2和string3等等的字符串用特殊字符串separator拼接起来,返回结果为连接参数产生的字符串。CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。如果分隔符为 NULL,则结果为 NULL。
    A.特殊字符连接
 
    B.此方法参数可以为NULL
   
    C.如果分隔符为NULL,则结果为NULL


    
三.GROUP_CONCAT()函数
    说明 : GROUP_CONCAT( [DISTINCT] 要连接的字段 [Order BY 排序字段 ASC/DESC] [Separator ‘分隔符’] )。
    A.以分类class_id分组,把权重weights字段的值在同一行打印出来,逗号分隔(默认)
   
    B.以分类class_id分组,把权重weights字段的值在一行打印出来,分号分隔

    
    C.以分类class_id分组,把权重weights字段的值去重打印在一行,逗号分隔


    D.以分类class_id分组,把权重weights字段的值去重打印在一行,逗号分隔,按照权重weights倒序排列

mysql中的实现字段或字符串拼接的三种方式

一、CONCAT函数

concat函数是将多个字段或字符串拼接为一个字符串;但是字符串之间没有任何分隔。

concat函数官方介绍

-- CONCAT函数的语法如下:
CONCAT(str1,str2,...)

1.1、拼接非空字段或字符串

SELECT CONCAT(字段1,字段2,字段3,...) from 表名;

-- 拼接表字段示例
SELECT CONCAT(id,genre,release_year) result from movies;

执行结果如下:

SELECT CONCAT(字符串1,字符串2,字符串3,...) ;

-- 拼接字符串示例
SELECT CONCAT('张三','李四','王五') result;

执行结果如下:

1.2、拼接空(NULL)字段

如果拼接的字段中有一个为null,则结果为null。

SELECT CONCAT(字符串1,字符串2,字符串3,...) ;

-- 拼接含有NULL字符串示例
SELECT CONCAT('张三',NULL,'王五') result;

执行结果如下:

二、CONCAT_WS函数

concat_ws函数将多个字段或字符串拼接为一个字符串,且字符串直接可以指定分隔符;

concat_ws函数的官方介绍

-- CONCAT_WS函数的语法如下:
CONCAT_WS(separator,str1,str2,...)

2.1、拼接非空字段或字符串

-- 拼接非空字段示例:
SELECT CONCAT_WS(' ',id,genre,release_year) result from movies;

-- 拼接字符串示例:
SELECT CONCAT_WS(' ','张三','李四','王五') result ;

执行结果如下:

2.2、拼接空(NULL)字段

-- 拼接空(NULL)字符串示例:
SELECT CONCAT_WS(' ','张三',NULL,'王五') result ;

执行结果如下:

三、GROUP_CONCAT函数

group_concat函数可以将多行字段数据合并为一行;且内容之间可以指定分隔符;

group_concat函数的官方介绍

group_concat函数的官方介绍翻译

-- group_concat函数的语法如下:
GROUP_CONCAT([DISTINCT] expr [,expr ...]
             [ORDER BY unsigned_integer | col_name | expr
                 [ASC | DESC] [,col_name ...]]
             [SEPARATOR str_val]
             [LIMIT [offset,] row_count | row_count OFFSET offset])

3.1、默认以逗号分隔符连接

-- 默认的逗号分隔
SELECT GROUP_CONCAT(字段名) from 表名;

-- 默认逗号分隔示例:
SELECT GROUP_CONCAT(genre) from movies;

执行结果如下:

3.2、可自定义对字段去重排序和指定分隔符

3.2.1、自定义分隔符

-- 自定义字符串分隔符
SELECT GROUP_CONCAT(字段名 SEPARATOR '分隔符号') from 表名;

-- 示例:
SELECT GROUP_CONCAT(genre SEPARATOR ';') from movies;

3.2.2、将整数转为字符串

--将整数字段转为字符
SELECT GROUP_CONCAT(CAST(字段名 as CHAR) SEPARATOR '分隔符号') from 表名;

-- 示例
SELECT GROUP_CONCAT(CAST(id as CHAR) SEPARATOR ';') from movies;

执行结果如下:

3.2.3、多字段拼接

-- 多字段拼接
SELECT GROUP_CONCAT(字段1,字段2,字段3 SEPARATOR '分隔符号') from 表名;

-- 示例
SELECT GROUP_CONCAT(release_year,genre,imdb SEPARATOR ';') from movies;

执行结果如下:

3.2.4、字段去重排序和自定义分隔

-- 字段去重排序和自定义分隔
SELECT GROUP_CONCAT(DISTINCT 字段名 ORDER BY 字段名 asc或desc SEPARATOR '分隔符号') from movies;

-- 示例
SELECT GROUP_CONCAT(DISTINCT genre ORDER BY genre DESC SEPARATOR ';') from movies;

执行后结果如下:

3.3、group_concat的限制和设置

3.3.1、查看当前group_concat函数的长度

默认是1024字节即1k;

-- 查看当前group_concat函数的长度
show variables like 'group_concat_max_len';

执行结果如下:

3.3.2、设置当前Session的group_concat函数的长度,不影响其他的Session

-- 设置当前Session的group_concat的长度为1M
SET SESSION group_concat_max_len = 1048576;

执行结果如下:

3.3.3、设置全局 group_concat函数的长度,需断开后重新连接才生效

-- 设置全局 group_concat函数的长度,需断开后重新连接才生效
SET GLOBAL group_concat_max_len = 1048576;

执行结果如下:

以上是关于MySQL字符串拼接(函数)的主要内容,如果未能解决你的问题,请参考以下文章

如何利用MySQL数据库中的字符串函数拼接截取

MySQL字段操作与数据处理

Oracle mysql 字符串尾数ASCII加一

MySQL 字符串拼接

mysql字符串拼接

mysql trim函数并拼接