MySQL模糊查询二三事

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: ### 1、源数据信息源数据字段:Student表字段Names 存储内容为"111,222,333,444,555,666,777,888"### 2、查询请求入参``` json{ "Names": "666,888"}```### 3、具体需求需要拿到既包含666又包含888,直接模糊查询或者Contains之类的无法满足### 4、方法实现###### 方法一:// 纯SQL语句``` c#var nameSql = string.Empty;for (int i = 0; i < namesList.Count; i++){

1、源数据信息

源数据字段:Student表字段Names 存储内容为"111,222,333,444,555,666,777,888"

2、查询请求入参

{
   
    "Names": "666,888"
}

3、具体需求

需要拿到既包含666又包含888,直接模糊查询或者Contains之类的无法满足

4、方法实现

方法一:

// 纯SQL语句

var nameSql = string.Empty;
for (int i = 0; i < namesList.Count; i++)
{
   
    nameSql += $"FIND_IN_SET('{namesList[i]}', REPLACE(names, ',', ',')) > 0";
    if (i != namesList.Count - 1)
        nameSql += " OR ";
}
var list = _student.AsQueryable()
    .WhereIF(args.Names.IsNotNullAndEmpty(), $"({nameSql})")
    .Where(x => x.Status > 0)
    .OrderBy(x => x.ID, OrderByType.Desc)
    .ToPageList(page.CurrenetPageIndex, page.PageSize, ref counts, ref pageCounts);

生成SQL如下:

SELECT
    *  
FROM
    `Student`  
WHERE
    (
  FIND_IN_SET(
      '666',
  REPLACE ( Names, ',', ',' )) > 0  
  OR FIND_IN_SET(
      '888',
  REPLACE ( Names, ',', ',' )) > 0  
    )  
    AND ( `Status` > 0 )  
ORDER BY
    `ID` DESC  
    LIMIT 0,10
方法二:

// 动态表达式 (推荐)

var namesList = new List<string>();
if (args.Names.IsNotNullAndEmpty())
    namesList = args.Names.Split(',').ToList();
Expressionable<WashRulegroup> exp_names = Expressionable.Create<WashRulegroup>();
foreach (var name in namesList)
{
    exp_names.Or(t => t.names.Contains(name));
}
var list = _rulegroup.AsQueryable()
    .WhereIF(args.Names.IsNotNullAndEmpty(), exp_names.ToExpression())
    .Where(x => x.Status > 0)
    .OrderBy(x => x.ID, OrderByType.Desc)
    .ToPageList(page.CurrenetPageIndex, page.PageSize, ref counts, ref pageCounts);

生成SQL如下:

SELECT
    *  
FROM
    `Student`  
WHERE
    (( `Names` LIKE concat( '%', '666', '%' )) OR ( `Names` LIKE concat( '%', '888', '%' )) )  
    AND ( `Status` > 0 )  
ORDER BY
    `ID` DESC  
    LIMIT 0,10

注:本文使用orm为sqlsugar

希望以上内容能够帮助你理解和学习MySQL模糊查询。欢迎点赞、关注、收藏,如果你还有其他问题,欢迎评论区交流。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6月前
|
关系型数据库 MySQL 测试技术
软件测试|MySQL LIKE:深入了解模糊查询
软件测试|MySQL LIKE:深入了解模糊查询
45 0
|
6月前
|
前端开发 关系型数据库 MySQL
趣谈MySQL 多个%等模糊查询
趣谈MySQL 多个%等模糊查询
33 0
|
7月前
|
SQL 算法 关系型数据库
【MySQL系列】Select语句单表查询详解入门(SELECT,AS,模糊查询,运算符,逻辑运算符)下
🌿五、BETWEEN...AND... BETWEEN作用: BETWEEN使用: 📌六 、模糊查询(LIKE) 1.通配符(`_ ` 和` %`) 2. 模糊查询的实现方式 3.使用: 2.例如 🌸七、逻辑运算符(and,or,not ) 1.and,or ,not作用: 2.and使用: 3.补充
|
7月前
|
安全 算法 关系型数据库
【MySQL系列】Select语句单表查询详解入门(SELECT,AS,模糊查询,运算符,逻辑运算符)上
文章目录 🌈一、Select语句入门 1.Select语句基本格式: 2.格式 🔎说明: 📃二、AS(起别名) 1.AS格式: 2.AS的使用: 🌟三、运算符>,<,=,<=…… 1.格式: 2.使用: 3.安全等于运算符: ‘<=>’ 💭四、 IN 和 NOT IN 1.in作用: 2.in的特点; 2.in的使用 3.补充
|
安全 关系型数据库 MySQL
【大数据系列之MySQL】(十三):MySQL模糊查询
【大数据系列之MySQL】(十三):MySQL模糊查询
433 0
|
SQL 存储 前端开发
MySQL模糊查询 先展示精确查询在展示模糊查询结果 | 结果按匹配度 排序
MySQL模糊查询 先展示精确查询在展示模糊查询结果 | 结果按匹配度 排序
536 0
|
存储 SQL 自然语言处理
MySQL 模糊查询再也不用like+%了
MySQL 模糊查询再也不用like+%了
|
SQL Java 关系型数据库
MySQL Like模糊查询速度太慢如何进行优化
🍅程序员小王的博客:程序员小王的博客 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕 🍅java自学的学习路线:java自学的学习路线
497 0
MySQL Like模糊查询速度太慢如何进行优化
|
SQL Java 关系型数据库
mysql连接5个表加模糊查询的sql怎么优化分析
🍅程序员小王的博客:程序员小王的博客 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕 🍅java自学的学习路线:java自学的学习路线
157 0
mysql连接5个表加模糊查询的sql怎么优化分析
|
关系型数据库 MySQL Java
mysql中like模糊查询的优化
这是我在一个百万级数据库数据导出遇到的问题 比如这个语句在这个数据库查询很慢: select a from tms where b like ‘%haha%’ order by time limit 100;
159 0