3

是否可以按字母顺序对列进行排序但忽略某些单词,例如“The”

例如

正常查询将返回

string 1
string 3
string 4
the string 2

我想回来

string 1
the string 2
string 3
string 4

这可能吗?

编辑 请注意,我希望替换多个单词,例如 The、A 等……可以这样做吗?

4

4 回答 4

5

你可以试试

SELECT id, text FROM table ORDER BY TRIM(REPLACE(LOWER(text), 'the ', ''))

但请注意,对于大型数据集,它会非常慢,因为它必须为每一行重新计算新字符串。

IMO 最好使用带有索引的单独列。

对于多个停用词,只需保持嵌套REPLACE调用。:)

于 2009-11-27T12:36:11.493 回答
0

我有一个超过 75,000 条记录的音乐列表,我也遇到过类似的情况。我编写了一个 PHP 脚本来检查所有以 'A'、'An' 或 'The' 开头的字符串,并从字符串中截断该部分。我还将所有大写字母转换为小写,并将该字符串存储在一个新列中。在该列上设置索引后,我就完成了。

显然,您显示初始列,但按新创建的索引列排序。我现在在一秒钟左右得到结果。

于 2009-11-27T13:21:26.277 回答
0

是的,应该可以使用带有 ORDER 部分的表达式:

SELECT * FROM yourTable ORDER BY REPLACE(yourField, "the ", "")
于 2009-11-27T12:34:35.927 回答
0

这将替换所有前导的“The”作为示例

SELECT  *
FROM    YourTable 
ORDER BY REPLACE(Val,'The ', '')
于 2009-11-27T12:35:24.070 回答