SQL 模糊查询后按匹配度排序 CASE WHEN THEN

表如下:
在这里插入图片描述

  SELECT  *  FROM  "table1"  where name  like   '%玉米%'

很明显这个会返回所有的行,因为每行都满足条件

在这里插入图片描述

若我想在模糊查询后,进行排序,完全匹配的放在最前面,其余的放后面,可以使用case when then

如:

SELECT * FROM "table1" WHERE name LIKE '%玉米%'
ORDER BY (
CASE
WHEN name='玉米' THEN 1
WHEN name like '玉米%' THEN 2
WHEN name like '%玉米%' THEN 3
WHEN name like '%玉米' THEN 4
ELSE 5
END
)

顺序是:完全匹配>开头匹配>中间匹配>最后匹配

else后面的数字代表剩余的情况则按ELSE后的数字顺序排,5>4,所以剩余的情况会排在最后

查询结果如图:
在这里插入图片描述

假设表里有多个字段,同时模糊查询多个字段,但是字段之间也有优先级排序,

比如name>nickname>code,然后再按完全匹配>开头匹配>中间匹配>最后匹配的顺序排

表如下:
在这里插入图片描述

那么我可以这样,sql语句如下:

SELECT * FROM "table1" WHERE name LIKE '%yumi%'
OR nickname LIKE '%yumi%' 
OR code LIKE '%yumi%'

ORDER BY (
CASE
WHEN name='yumi' THEN 1
WHEN name like 'yumi%' THEN 2
WHEN name like '%yumi%' THEN 3
WHEN name like '%yumi' THEN 4

WHEN nickname='yumi' THEN 5
WHEN nickname like 'yumi%' THEN 6
WHEN nickname like '%yumi%' THEN 7
WHEN nickname like '%yumi' THEN 8

WHEN code='yumi' THEN 9
WHEN code like 'yumi%' THEN 10
WHEN code like '%yumi%' THEN 11
WHEN code like '%yumi' THEN 12

ELSE 13
END
)

如图:

在这里插入图片描述

这个表格的数据不是十分贴切,但是大致是这样意思

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

站长漫谈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值