按字符串排序,中间有空格

axkjgtzd  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(411)

我的表列“business”如下所示:

Michael Kors
Baltimore Michael Kors
Charlotte Michael Kors
Michael Texas
Kors Dallas
Michael Kors

我必须在字符串'michael kors'的这个列上应用order by,所以排序结果应该是这样的:

Michael Kors
Michael Kors
Baltimore Michael Kors
Charlotte Michael Kors
Kors Dallas
Michael Texas

如果字符串包含子字符串michael kors,它应该按字母顺序排列在最上面。所以在上面的例子中,上面有两行完全匹配,然后巴尔的摩和夏洛特按字母顺序排在第三和第四。不担心其他字符串不包含确切的单词michael kors
我试过使用子串索引,但看起来它不能很好地与子串与空间。感谢大家的帮助。

6ojccjat

6ojccjat1#

您可以有多个订购级别:

order by 
  locate('Michael Kors', business)=1 desc, 
  locate('Michael Kors', business)>0 desc, 
  business

第一种方法将完全匹配的行排序到最上面,下一种方法对其余匹配行进行排序,第三种方法对所有其余行进行排序。

omhiaaxx

omhiaaxx2#

试试这个,

order by FIELD(business, 'Michael Kors’)
mec1mxoz

mec1mxoz3#

你可以在你的列表中列出布尔表达式 order by 子句,并应用降序,以便将此表达式为true的记录排列在产生false的记录之前。然后在末尾指定字母顺序,以确定所有其他表达式对两个记录没有区别时的顺序:

select   * 
from     mytable
order by (business = 'Michael Kors') desc,
         (business like '%Michael Kors%') desc,
         (business like '%Kors%') desc,
         (business like '%Michael%') desc,
         business

相关问题