concat和concat_ws()区别及group_concat() ,repeat()字符串函数

2023-12-10 21:58

本文主要是介绍concat和concat_ws()区别及group_concat() ,repeat()字符串函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1、 concat () 函数
    1.1 MySQL的concat函数可以连接一个或者多个字符串
,
        mysql
> select concat ( '10' );
        +--------------+
        |
concat ( '10' ) |
        +--------------+
        |
10            |
        +--------------+
       
1 row in set ( 0.00 sec )

       
mysql > select concat ( '11' , '22' , '33' );
        +------------------------+
        |
concat ( '11' , '22' , '33' ) |
        +------------------------+
        |
112233                  |
        +------------------------+

       
1 row in set ( 0.00 sec )

       
而Oracle的concat函数只能连接两个字符串

        SQL
> select concat ( '11' , '22' ) from dual ;

   
1.2 MySQL的concat函数在连接字符串的时候,只要其中一个是NULL , 那么将返回NULL

        mysql
> select concat ( '11' , '22' , null );
        +------------------------+
        |
concat ( '11' , '22' , null ) |
        +------------------------+
        |
NULL                    |
        +------------------------+
       
1 row in set ( 0.00 sec )

       
而Oracle的concat函数连接的时候,只要有一个字符串不是NULL , 就不会返回NULL

        SQL
> select concat ( '11' , NULL ) from dual ;
       
CONCAT
       
--
       
11

2、concat_ws
() 函数 , 表示concat with separator , 即有分隔符的字符串连接
    如连接后以逗号分隔
        mysql
> select concat_ws ( ',' , '11' , '22' , '33' );

        +-------------------------------+
        |
concat_ws ( ',' , '11' , '22' , '33' ) |
        +-------------------------------+
        |
11 , 22 , 33                       |
        +-------------------------------+
       
1 row in set ( 0.00 sec )

   
和concat不同的是 , concat_ws函数在执行的时候 , 不会因为NULL值而返回NULL
        mysql
> select concat_ws ( ',' , '11' , '22' , NULL );
        +-------------------------------+
        |
concat_ws ( ',' , '11' , '22' , NULL ) |
        +-------------------------------+
        |
11 , 22                          |
        +-------------------------------+
       
1 row in set ( 0.00 sec )

3、group_concat () 可用来行转列 , Oracle没有这样的函数 (mysql4.1及以上 )

    完整的语法如下
    group_concat
([ DISTINCT ] 要连接的字段 [ Order BY ASC / DESC 排序字段 ] [ Separator '分隔符' ])
   
如下例子
    mysql
> select * from aa ;

    +------+------+
    |
id    | name |
    +------+------+
    |    
1 | 10    |
    |    
1 | 20    |
    |    
1 | 20    |
    |    
2 | 20    |
    |    
3 | 200   |
    |    
3 | 500   |
    +------+------+
   
6 rows in set ( 0.00 sec )
    3.1 以id分组,把name字段的值打印在一行,逗号分隔 ( 默认 )
       
mysql > select id , group_concat ( name ) from aa group by id ;
        +------+--------------------+
        |
id    | group_concat ( name ) |
        +------+--------------------+
        |    
1 | 10 , 20 , 20            |
        |    
2 | 20                  |
        |    
3 | 200 , 500             |
        +------+--------------------+

       
3 rows in set ( 0.00 sec )

   
3.2 以id分组,把name字段的值打印在一行,分号分隔
        mysql
> select id , group_concat ( name separator ';' ) from aa group by id ;
        +------+----------------------------------+
        |
id    | group_concat ( name separator ';' ) |
        +------+----------------------------------+
        |    
1 | 10 ; 20 ; 20                          |
        |    
2 | 20                                |
        |    
3 | 200 ; 500                           |
        +------+----------------------------------+

       
3 rows in set ( 0.00 sec )

   
3.3 以id分组,把去冗余的name字段的值打印在一行,逗号分隔

        mysql
> select id , group_concat ( distinct name ) from aa group by id ;

        +------+-----------------------------+
        |
id    | group_concat ( distinct name ) |
        +------+-----------------------------+
        |    
1 | 10 , 20                        |
        |    
2 | 20                           |
        |    
3 | 200 , 500                      |
        +------+-----------------------------+

       
3 rows in set ( 0.00 sec )

   
3.4 以id分组,把name字段的值打印在一行,逗号分隔 , 以name排倒序

        mysql
> select id , group_concat ( name order by name desc ) from aa group by id ;

        +------+---------------------------------------+
        |
id    | group_concat ( name order by name desc ) |
        +------+---------------------------------------+
        |    
1 | 20 , 20 , 10                               |
        |    
2 | 20                                     |
        |    
3 | 500 , 200                                |
        +------+---------------------------------------+

       
3 rows in set ( 0.00 sec )

4、repeat () 函数,用来复制字符串 , 如下 'ab' 表示要复制的字符串,2表示复制的份数

    mysql
> select repeat ( 'ab' , 2 );

    +----------------+
    |
repeat ( 'ab' , 2 ) |
    +----------------+
    |
abab            |
    +----------------+

   
1 row in set ( 0.00 sec )

   
又如
    mysql
> select repeat ( 'a' , 2 );

    +---------------+
    |
repeat ( 'a' , 2 ) |
    +---------------+
    |
aa             |
    +---------------+
   
1 row in set ( 0.00 sec )

这篇关于concat和concat_ws()区别及group_concat() ,repeat()字符串函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/478500

相关文章

Oracle的to_date()函数详解

《Oracle的to_date()函数详解》Oracle的to_date()函数用于日期格式转换,需要注意Oracle中不区分大小写的MM和mm格式代码,应使用mi代替分钟,此外,Oracle还支持毫... 目录oracle的to_date()函数一.在使用Oracle的to_date函数来做日期转换二.日

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

结构体和联合体的区别及说明

《结构体和联合体的区别及说明》文章主要介绍了C语言中的结构体和联合体,结构体是一种自定义的复合数据类型,可以包含多个成员,每个成员可以是不同的数据类型,联合体是一种特殊的数据结构,可以在内存中共享同一... 目录结构体和联合体的区别1. 结构体(Struct)2. 联合体(Union)3. 联合体与结构体的

C#中字符串分割的多种方式

《C#中字符串分割的多种方式》在C#编程语言中,字符串处理是日常开发中不可或缺的一部分,字符串分割是处理文本数据时常用的操作,它允许我们将一个长字符串分解成多个子字符串,本文给大家介绍了C#中字符串分... 目录1. 使用 string.Split2. 使用正则表达式 (Regex.Split)3. 使用

什么是 Ubuntu LTS?Ubuntu LTS和普通版本区别对比

《什么是UbuntuLTS?UbuntuLTS和普通版本区别对比》UbuntuLTS是Ubuntu操作系统的一个特殊版本,旨在提供更长时间的支持和稳定性,与常规的Ubuntu版本相比,LTS版... 如果你正打算安装 Ubuntu 系统,可能会被「LTS 版本」和「普通版本」给搞得一头雾水吧?尤其是对于刚入

python中json.dumps和json.dump区别

《python中json.dumps和json.dump区别》json.dumps将Python对象序列化为JSON字符串,json.dump直接将Python对象序列化写入文件,本文就来介绍一下两个... 目录1、json.dumps和json.dump的区别2、使用 json.dumps() 然后写入文

Java中JSON字符串反序列化(动态泛型)

《Java中JSON字符串反序列化(动态泛型)》文章讨论了在定时任务中使用反射调用目标对象时处理动态参数的问题,通过将方法参数存储为JSON字符串并进行反序列化,可以实现动态调用,然而,这种方式容易导... 需求:定时任务扫描,反射调用目标对象,但是,方法的传参不是固定的。方案一:将方法参数存成jsON字

C++11的函数包装器std::function使用示例

《C++11的函数包装器std::function使用示例》C++11引入的std::function是最常用的函数包装器,它可以存储任何可调用对象并提供统一的调用接口,以下是关于函数包装器的详细讲解... 目录一、std::function 的基本用法1. 基本语法二、如何使用 std::function

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>

native和static native区别

本文基于Hello JNI  如有疑惑,请看之前几篇文章。 native 与 static native java中 public native String helloJni();public native static String helloJniStatic();1212 JNI中 JNIEXPORT jstring JNICALL Java_com_test_g