我想知道是否可以使用ORDER子句(或任何其他子句)进行排序,而不考虑某些单词。
对于前任,文章“the”:
瑞士银行(
)
应按以下几个类别分类:
美国银行(
)
而不是
美国银行( Switzerland
)
发布于 2012-01-30 14:22:40
select * from #test
order by
case when test like 'The %' then substring(test, 5, 8000) else test end发布于 2012-01-30 14:19:02
如果你想删掉的单词数量有限,那么你可以通过明智地使用REPLACE来删除它们。
ORDER BY REPLACE(REPLACE(' ' + Column + ' ',' the ',' '),' and ',' ')但是,随着字数的增加,您将有越来越多的嵌套REPLACE调用。此外,这个ORDER BY将无法从任何索引中受益,并且不会处理标点符号。
如果这种排序频繁,并且查询本来可以从索引中受益,则可以考虑将上面的计算列设置为计算列,并在其之上创建索引(然后按计算列进行排序)。
发布于 2012-01-30 14:19:27
不,并不是因为the在这种情况下是任意的。最接近的操作是修改字段值,如下所示:
SELECT field1
FROM table
ORDER BY REPLACE(field1, 'The ', '')问题是要替换两个单词,您必须下一个REPLACE语句,如果您有超过5个单词,这将是一个很大的问题:
SELECT field1
FROM table
ORDER BY REPLACE(REPLACE(field1, 'of ', ''), 'The ', '')更新:,您实际上不需要检查the或of是否出现在字段的开头,因为您只想按重要的单词进行排序。例如,Bank of America应该出现在Bank England之前( of不应该在之后选择)。
https://stackoverflow.com/questions/9065176
复制相似问题