我觉得这个Q没有简单的答案,但无论如何都要进行。我正在使用Codeigniter和MySQL。我从数据库中提取资源标题列表,其中包含以下查询:
SELECT * FROM resource ORDER BY title ASC
并希望按字母顺序对它们进行排序,忽略开头的“the”。像(来自another question):
显示为:
One answer建议一些混乱的SQL,这可能是一种可能性,但我想得到一个通用的算法,我可以在所有项目中应用,因为这是一个常见的问题。
如果没有简单的答案,那么这并不重要 - 这只是我的用户的“优雅笔记”:)
答案 0 :(得分:4)
怎么样:
order by (case when title like 'The %' then substring(title, 5, 1000) else title end)
答案 1 :(得分:0)
您可以为'title'创建一个重复列,然后从该列中删除所有'the'。
首先更新表格以复制'title'列
ALTER TABLE resource
ADD title_less_the varchar(50) (same as title)
UPDATE resource
SET title_less_the = title
update resource (
set title_less_the = replace(title_less_the, 'the ', '')
然后当您搜索这样的内容时,不会删除已修改的列:
SELECT column1, column2, column3 FROM resource
ORDER BY title_less_the ASC