前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL模糊查询二三事

MySQL模糊查询二三事

原创
作者头像
GoodTime
发布2024-03-15 16:22:51
770
发布2024-03-15 16:22:51
举报

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++)
{
    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如下:

代码语言: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
方法二:

// 动态表达式 <font color=yellow>(推荐)</font>

代码语言:C#
复制
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如下:

代码语言: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模糊查询。欢迎点赞、关注、收藏,如果你还有其他问题,欢迎评论区交流。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、源数据信息
  • 2、查询请求入参
  • 3、具体需求
  • 4、方法实现
    • 希望以上内容能够帮助你理解和学习MySQL模糊查询。欢迎点赞、关注、收藏,如果你还有其他问题,欢迎评论区交流。
    相关产品与服务
    云数据库 MySQL
    腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    http://www.vxiaotou.com