zoukankan      html  css  js  c++  java
  • 模糊搜索:concat各种函数详解、like操作符、通配符

    if(StringUtils.isNotBlank(queryBean.getConditions())){
        hqlBuilder.addWhereClause(" concat(this.user.name,this.ip,this.mac,this.name,this.organization.name) like ? ", "%"+queryBean.getConditions()+"%");
    }

    一、LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。

      语法:SELECT column_name(s) FROM table_name WHERE column_name LIKE pattern;

      通过使用 NOT 关键字,您可以选取不匹配模式的记录。

    SELECT * FROM Websites
    WHERE name LIKE 'G%';
    //选取 name 以字母 "G" 开始的所有客户
    SELECT * FROM Websites
    WHERE name LIKE '%k';
    //选取 name 以字母 "k" 结尾的所有客户
    SELECT * FROM Websites
    WHERE name LIKE '%oo%';
    //选取 name 包含模式 "oo" 的所有客户
    SELECT * FROM Websites
    WHERE name NOT LIKE '%oo%';
    //选取 name 不包含模式 "oo" 的所有客户

    二、CONCAT()函数用于将多个字符串连接成一个字符串,是最重要的mysql函数之一,下面就将为您详细介绍mysql CONCAT()函数:

    1、mysql CONCAT(str1,str2,…) 

      返回结果为连接参数产生的字符串

      如有任何一个参数为NULL ,则返回值为 NULL。或许有一个或多个参数。(所以上面写法是有问题的,如果库里某个项为null,那么模糊查询时,concat的结果都将是null,需要用到下面介绍的concat_ws()比较好

      如果所有参数均为非二进制字符串,则结果为非二进制字符串。

      如果自变量中含有任一二进制字符串,则结果为一个二进制字符串。一个数字参数被转化为与之相等的二进制字符串格式;

      若要避免这种情况,可使用显式类型 cast,例如: SELECT CONCAT(CAST(int_col AS CHAR), char_col)

    mysql> SELECT CONCAT(’My’, ‘S’, ‘QL’);
    // ‘MySQL’
    
    mysql> SELECT CONCAT(’My’, NULL, ‘QL’);
    // NULL
    
    mysql> SELECT CONCAT(14.3);
    // ‘14.3′

    2、mysql CONCAT_WS(separator,str1,str2,…)

      CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。

      第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数。

      如果分隔符为 NULL,则结果为 NULL。

      函数会忽略任何分隔符参数后的 NULL 值。这是和MySQL中concat函数不同的地方、concat_ws函数在执行的时候,不会因为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 CONCAT_WS()不会忽略任何空字符串。 (然而会忽略所有的 NULL)。

     3、group_concat函数

      完整的语法如下: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)

      以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)

      以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)

      以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)

      以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)
  • 相关阅读:
    elasticsearch中多个字段聚合及java实现
    elasticsearch中must和should组合查询
    Hash(哈希/散列)表中冲突处理及命中计算
    PHP代码审计理解(一)----Metinfo5.0变量覆盖
    SSL 3.0 POODLE攻击信息泄露漏洞_CVE-2014-3566
    菜鸡试飞----SRCの信息收集手册
    python3-邮件发送-不同格式
    windows下常用快捷指令记忆
    杂记
    偶然碰到的编码转换技巧--叮!
  • 原文地址:https://www.cnblogs.com/goloving/p/7576440.html
Copyright © 2011-2022 走看看