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

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

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

  1. Michael Kors
  2. Baltimore Michael Kors
  3. Charlotte Michael Kors
  4. Michael Texas
  5. Kors Dallas
  6. Michael Kors

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

  1. Michael Kors
  2. Michael Kors
  3. Baltimore Michael Kors
  4. Charlotte Michael Kors
  5. Kors Dallas
  6. Michael Texas

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

6ojccjat

6ojccjat1#

您可以有多个订购级别:

  1. order by
  2. locate('Michael Kors', business)=1 desc,
  3. locate('Michael Kors', business)>0 desc,
  4. business

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

omhiaaxx

omhiaaxx2#

试试这个,

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

mec1mxoz3#

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

  1. select *
  2. from mytable
  3. order by (business = 'Michael Kors') desc,
  4. (business like '%Michael Kors%') desc,
  5. (business like '%Kors%') desc,
  6. (business like '%Michael%') desc,
  7. business

相关问题