如何在SQL中排序,忽略文章(‘the“,”a“,”an“等)

这出现了很多,我可以看到它出现在StackOverflow上的 XSLT,RubyDrupal,但我没有看到它专门用于sql.

所以问题是,当你以“The”,“A”或“An”开头时,如何正确地对标题进行排序?

一种方法是TRIM()那些字符串:

ORDER BY TRIM( 
  LEADING 'a ' FROM 
  TRIM( 
    LEADING 'an ' FROM 
    TRIM( 
      LEADING 'the ' FROM LOWER( title ) 
      ) 
    ) 
  )

前一阵子是suggested on AskMeFi(它需要LOWER()函数吗?).

我知道我也看到过某种Case / Switch实现,但这对谷歌来说有点困难.

显然,有许多可能的解决方案.什么是好的是sql大师权衡其中有性能影响.

解决方法

我见过的一种方法是有两列 – 一列用于显示,另一列用于排序:
description  |  sort_desc
----------------------------
The the      | the,The
A test         | test,A
I,Robot      | i,Robot

我没有进行任何真实世界的测试,但这样做的好处是能够使用索引,并且每次要按描述排序时都不需要字符串操作.除非您的数据库支持物化视图(MysqL不支持),否则在视图中将逻辑实现为计算列将不会提供任何好处,因为您无法索引计算列.

相关文章

(一)日志传送架构 (1.1)相关服务器 主服务器 :用于生产的服务器,上面运行这生产SQL Server数据库...
(一)事故背景 最近在SQL Server 2012生产数据库上配置完事物复制(发布订阅)后,生产数据库业务出现了...
(一)测试目的 目前公司使用的SQL SERVER 2012高可用环境为主备模式,其中主库可执行读写操作,备库既...
(一)背景个人在使用sql server时,用到了sql server的发布订阅来做主从同步,类似MySQL的异步复制。在...
UNION和OR谓词 找出 product 和 product2 中售价高于 500 的商品的基本信息. select * from product wh...
datawhale组队学习task03