• mysql concat和group_concat


    mysql concat(str1,str2...)连接两个字符串,(数字也是可以的,会转成字符串)

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

    mysql> select concat('11','22',null);
    +------------------------+
    | concat('11','22',null) |
    +------------------------+
    | NULL   |
    +------------------------+
    1 row in set (0.00 sec)
    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)
    现在有这样一个需求,
    要查找用户名和密码为(user1,pwd1),(user2,pwd2),(user2,plwd3)
    由于字段与字段之间有关联,我们就可以使用连接解决这个问题:
    select * from user where concat(username,'-',pwd) in ('user1-pwd1','user2-pwd2')
     
    group_concat()可用来行转列, Oracle没有这样的函数
     
    完整的语法如下
    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)
  • 相关阅读:
    MySQL 性能监控4大指标——第二部分
    mysql 复制A表 到B表;insert into select * from table
    spring boot整合mybatis查询数据库返回Map字段为空不返回解决
    sprinbboot 热部署 造成类加载器 不一致问题
    springboot 整合dubbo 消费模块引入springboot 之后自动注入jdbc 模块导致启动报错问题
    基于Cent os 云服务器中SVN 服务器的搭建---具体实践是可行的 一次备注便于后续查找
    centos7 yum安装配置redis 并设置密码
    ccenteros 部署 redis
    linux ccenteros 部署 redis
    mybatis 插入日期类型精确到秒的有关问题
  • 原文地址:https://www.cnblogs.com/youxin/p/3945585.html
Copyright © 2020-2023  润新知