2

我在 MySQL 数据库中有一个表,其中包含这样的数据;

ID  text
1   Action Jackson
2   The impaler
3   The chubby conquistador
4   Cornholer

我想按字母顺序显示它们减去前导的“The”。这就是我想出的有效方法。

SELECT ID, CASE LEFT(l.text, 4) WHEN "The " THEN CONCAT(RIGHT(l.text, LENGTH(l.text) - 4), ", The") ELSE l.text END AS "word"
FROM list l

这个解决方案似乎有点笨拙,有人有更优雅的答案吗?

4

3 回答 3

1

我认为这就是你要找的:

SELECT ID,
       text
FROM list l
ORDER BY TRIM(LEADING 'The ' FROM text);
于 2012-08-09T10:20:02.383 回答
1

如果可以的话,我会考虑对您的数据进行一些重组。依靠 mysql 索引和适当的排序而不是像这样动态地进行排序要好数百倍。

添加一个删除“The”的字段并对其进行排序怎么样?您可以通过几个触发器确保此辅助字段始终正确。

于 2012-08-09T10:20:02.993 回答
1
SELECT TRIM(LEADING 'The' FROM text) as word 
FROM list 
ORDER BY TRIM(LEADING 'The' FROM text)
于 2012-08-09T10:20:10.503 回答