美文网首页数据库程序员
SQL模糊查询排序问题

SQL模糊查询排序问题

作者: 马拉松Mara | 来源:发表于2017-06-13 21:09 被阅读75次

需求描述

  • 查询表中名字带指定关键字的数据
  • 完全匹配放在第一位
  • 前匹配放在第二位
  • 末尾匹配放在第三位
  • 中间匹配放在第四位

建表

DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
  `id` varchar(20) NOT NULL,
  `name` varchar(20) DEFAULT NULL,
  `password` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

初始数据

insert into t_user values(1,'汪峰','888888');
insert into t_user values(2,'王汪峰','888888');
insert into t_user values(3,'汪峰峰','888888');
insert into t_user values(4,'欧阳汪峰','888888');
insert into t_user values(5,'王汪峰峰','888888');

直接like查询

select * from t_user where name like '%汪峰%';

结果为:

01.png

可以发现,“汪峰峰”并没有排列在“王汪峰”前面

使用case when进行辅助排序

select * from t_user f where f.name like '%汪峰%' order by 
(case
when f.name = '汪峰' then 1 
when f.name like '汪峰%' then 2
when f.name like '%汪峰' then 3
when f.name like '%汪峰%' then 4  
else 0
end ) limit 0,50;

查询结果为:

02.png

等于说额外添加了一个虚拟列,来辅助进行排序;
首先匹配完全==的,然后再按照规则匹配下一条数据,就能得到我们想要的结果了。

备注

如果排序后,需要按照中文拼音的顺序继续排序,需要加上:

CONVERT(f.name USING gbk) COLLATE gbk_chinese_ci

相关文章

  • SQL模糊查询排序问题

    需求描述 查询表中名字带指定关键字的数据 完全匹配放在第一位 前匹配放在第二位 末尾匹配放在第三位 中间匹配放在第...

  • SQL模糊查询法

    SQL模糊查询语法LIKE 有关SQL模糊查询 执行 数据库查询时,有完整查询和模糊查询之分。 一般模糊语句如下:...

  • 2021-01-16 - mysql优化

    分页优化 表结构如下 根据主键的查询排序 sql查询 会用到索引吗? 非主键的排序分页查询 sql查询 会用到索引...

  • EF Core 备忘

    模糊查询sql linq 内连接查询sql linq 左连接查询sql linq 左连接查询(连接内带条件)sql...

  • 模糊查询SQL

    servlet获取请求参数,把参数封装为Javabeans对象,在调用方法,传入刚才封装的对象,

  • python SQL模糊查询语句问题

    在Python上如果使用sql语句:select * from table_name where field_na...

  • mongodb 中的like 怎么使用

    LIKE模糊查询userName包含A字母的数据(%A%) SQL: MongoDB: LIKE模糊查询userN...

  • 第十章 SQL排序(二)

    第十章 SQL排序(二) 查询排序 InterSystems SQL提供了排序规则功能,可用于更改字段的排序规则或...

  • 分页排序查询出现重复字段

    当sql查询操作使用order by 排序再进行limit分页时会出现重复问题原因是order by排序不稳定每次...

  • mybatis动态order by 排序问题 2021-09-

    1、问题 sql查询需要根据条件动态修改排序字段以及升降序;刚开始尝试在sql中直接使用choose when进行...

网友评论

    本文标题:SQL模糊查询排序问题

    本文链接:https://www.haomeiwen.com/subject/yjsjqxtx.html