在varchar字段的开头按字母顺序排序带有"The","A","An"等的记录

dan*_*dan 7 mysql sql postgresql

我正在为这类问题寻找MySQL和PostgreSQL解决方案.

假设我有一些title字段的记录.标题是书籍或电影名称,如"帽子里的猫"和"罗宾汉".但是虽然标题必须以原始形式显示,但它们应该按照图书馆对它们进行排序的方式进行排序,即通过将任何文章(如"The"或"An")移动到标题的末尾.

因此,"帽子里的猫"就好像它是"帽子里的猫"一样.

设计模式或编写查询的最佳方法是什么,以便这些记录按标题排序,就像库对标题排序一样?(我也希望我知道这种按标题排序的技术术语.)另外,我应该注意哪些性能考虑因素以及应该创建哪些索引?

Jef*_*and 3

创建一个自定义函数(也许是 sortableTitle?),它将修改以您不需要的单词开头的字符串。使用 完成查询语句order by sortableTitle(title)。这将产生额外的 CPU 成本,但您必须进行基准测试才能知道成本是多少。

您可以创建一个由触发器填充的额外列 (sortTitle)。这将占用一些空间,但随后您的服务器将能够按索引对行进行排序。

除上述情况外,您不能(在不修改数据库服务器代码的情况下)直接按照您想要的顺序创建索引。据我所知,这适用于 MySQL 和 PostgreSQL。

  • 对于 PostgreSQL,可以在函数上创建索引以加快排序速度:`CREATE INDEX sort_index ON my_table ( sortableTitle(title) )` (2认同)