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

时间:2018-07-06 08:00:24

标签: mysql sql database

“我的表格”列“业务”如下所示:

var CronJob = require('cron').CronJob;
if(cluster.isMaster) {
    var numWorkers = require('os').cpus().length;

    console.log('Master cluster setting up ' + numWorkers + ' workers...');

    for(var i = 0; i < numWorkers; i++) {
        cluster.fork();
    }

    cluster.on('exit', function(worker, code, signal) {
        console.log('Worker ' + worker.process.pid + ' died with code: ' + code + ', and signal: ' + signal);
        cluster.fork();
    });

    new CronJob('01 30 08 * * 0-6', function() {
      console.log('Running Schedular');
      //Performing tasks
    }, null, true, 'America/Los_Angeles');

} else {

    var server = app.listen(port, function() {
        console.log('Process ' + process.pid + ' is listening to all incoming requests');
    });
}

我必须在字符串'Michael Kors'的此列上应用排序依据,因此排序的结果应类似于以下内容:

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

如果String包含子字符串Michael Kors,则应按字母顺序在其顶部。因此,在上面的示例中,具有完全匹配项的两行位于顶部,然后是巴尔的摩和夏洛特,按字母顺序分别为第三和第四。不担心其他字符串不包含确切的单词Michael Kors

我尝试使用Substring_Index,但似乎不适用于带有空格的子字符串。感谢所有帮助。

3 个答案:

答案 0 :(得分:3)

您可以有多个订购级别:

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

第一个将最上面的匹配项排序到顶部,第二个级别将其余的匹配行排序,第三个排序所有的其余行。

答案 1 :(得分:1)

您可以在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

答案 2 :(得分:1)

尝试一下,

order by FIELD(business, 'Michael Kors’)