2010-10-26 78 views
0

,如果我有以下结果集的查询:排序基于省略字

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

如何按名称,以便它忽略了“的”字和排序如下对它们进行排序:

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

在此先感谢。我使用的是MySQL

+0

我的意思是名称必须排序,以便它忽略单词“The” – yretuta 2010-10-26 08:26:31

回答

3

尝试:

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

更多信息here

+0

+1;值得一提的是,这对大型数据集来说会很慢,因为它可能无法使用索引。 – 2010-10-26 08:30:10

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 
1

有几个建议“活”修剪,这将正常工作的答案。

然而,如果性能是很重要的(巨大大量的行)认为具有包含The和其他已删除豁免计算的话标题单独列title_sort

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