MySQL模糊查询二三事
【摘要】 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;f...
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模糊查询。欢迎点赞、关注、收藏,如果你还有其他问题,欢迎评论区交流。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)