首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >T/ SQL SERVER中的排序(或使用ORDER BY子句)而不考虑某些单词

T/ SQL SERVER中的排序(或使用ORDER BY子句)而不考虑某些单词
EN

Stack Overflow用户
提问于 2012-01-30 14:15:02
回答 5查看 1.2K关注 0票数 3

我想知道是否可以使用ORDER子句(或任何其他子句)进行排序,而不考虑某些单词。

对于前任,文章“the”:

瑞士银行(

  1. )、瑞士银行(
  2. )、美国银行(
  3. )、英格兰银行(The

)

应按以下几个类别分类:

美国银行(

  1. )、美国银行(
  2. )、英格兰银行(The)、瑞士银行(
  3. )、瑞士银行(

)

而不是

美国银行( Switzerland

  • The of
  1. )、美国银行(
  2. )、英格兰银行( Bank of England)、英国银行(

)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-01-30 14:22:40

代码语言:javascript
复制
select * from #test
order by
case when test like 'The %' then substring(test, 5, 8000) else test end
票数 2
EN

Stack Overflow用户

发布于 2012-01-30 14:19:02

如果你想删掉的单词数量有限,那么你可以通过明智地使用REPLACE来删除它们。

代码语言:javascript
复制
ORDER BY REPLACE(REPLACE(' ' + Column + ' ',' the ',' '),' and ',' ')

但是,随着字数的增加,您将有越来越多的嵌套REPLACE调用。此外,这个ORDER BY将无法从任何索引中受益,并且不会处理标点符号。

如果这种排序频繁,并且查询本来可以从索引中受益,则可以考虑将上面的计算列设置为计算列,并在其之上创建索引(然后按计算列进行排序)。

票数 2
EN

Stack Overflow用户

发布于 2012-01-30 14:19:27

不,并不是因为the在这种情况下是任意的。最接近的操作是修改字段值,如下所示:

代码语言:javascript
复制
SELECT   field1
FROM     table
ORDER BY REPLACE(field1, 'The ', '')

问题是要替换两个单词,您必须下一个REPLACE语句,如果您有超过5个单词,这将是一个很大的问题:

代码语言:javascript
复制
SELECT   field1
FROM     table
ORDER BY REPLACE(REPLACE(field1, 'of ', ''), 'The ', '')

更新:,您实际上不需要检查theof是否出现在字段的开头,因为您只想按重要的单词进行排序。例如,Bank of America应该出现在Bank England之前( of不应该在之后选择)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9065176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档