基于省略单词对查询排序

时间:2010-10-26 08:22:53

标签: mysql database sorting

如果我有以下结果集:

id, name 
1, The Popper
2, Brittany
3, Fledgler
4, The Nightingale

如何按名称对它们进行排序,以便忽略“The”字并按如下方式排序:

id, name
1, Britanny
2, Fledler
3, The Nightingale
4, The Popper

提前致谢。我正在使用MySQL

4 个答案:

答案 0 :(得分:3)

尝试:

SELECT id, name
FROM myTable
ORDER BY TRIM(LEADING 'The ' FROM name)

更多信息here

答案 1 :(得分:1)

 SELECT id,title,
    CASE WHEN LOWER(SUBSTRING_INDEX(Title, ' ', 1))
            IN ('a', 'an', 'the')
        THEN CONCAT(
            SUBSTRING(Title, INSTR(Title, ' ') + 1),
            ', ',
            SUBSTRING_INDEX(Title, ' ', 1)
        )
        ELSE Title
    END AS TitleSort
FROM books
ORDER BY TitleSort

答案 2 :(得分:1)

有几个答案表明“实时”修剪,这将很好。

但是,如果性能很重要(巨大很多行),请考虑使用包含title_sort标题的单独列The以及已删除的其他已忽略的字词。

这样,数据库引擎可以充分利用索引和其他优化。

答案 3 :(得分:0)

使用此 - > http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_trim从Order by子句中删除关键字开头的“The”。