如果我有以下结果集:
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
答案 0 :(得分:3)
答案 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”。