,如果我有以下结果集的查询:排序基于省略字
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
,如果我有以下结果集的查询:排序基于省略字
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
+1;值得一提的是,这对大型数据集来说会很慢,因为它可能无法使用索引。 – 2010-10-26 08:30:10
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
使用此 - >http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_trim可以从Order by子句中的关键字开头删除“The”。
有几个建议“活”修剪,这将正常工作的答案。
然而,如果性能是很重要的(巨大大量的行)认为具有包含The
和其他已删除豁免计算的话标题单独列title_sort
。
这样,数据库引擎可以充分利用索引和其他优化。
我的意思是名称必须排序,以便它忽略单词“The” – yretuta 2010-10-26 08:26:31