使用ORDER BY & CHARINDEX 进行自定义排序
2017-05-02 10:43
274 查看
在SQL SERVER 中,ORDER BY 语句用于根据指定的列对查询记录进行排序,默认按照升序对查询记录进行排序(关键字ASC可以省略),若希望按照降序进行排列,可以在ORDER BY之后使用DESC关键字。
1、使用升序时,默认按汉语首拼音的顺序进行排序。
Dongguan、Foshan、Guangzhou、Shantou、Shenzhen、ZhuhaiUSE [SQL PRACTICE] GO SELECT DISTINCT [地市] FROM [dbo].[广东各地市销量] ORDER BY [地市]
2、反之,使用DESC进行降序排列。
USE [SQL PRACTICE] GO SELECT DISTINCT [地市] FROM [dbo].[广东各地市销量] ORDER BY [地市] DESC
3、问题来了,如果既不想按升序、也不想按降序排列,该怎么处理呢?
举例:必须按照“广州、深圳、东莞、佛山、汕头、珠海”的顺序进行,在此使用CHARINDEX函数,语句及运行结果如下:USE [SQL PRACTICE] GO SELECT [地市] ,SUM([销量]) 销量 FROM [dbo].[广东各地市销量] GROUP BY [地市] ORDER BY CHARINDEX([地市],'广州,深圳,东莞,佛山,汕头,珠海')
换个直观的角度来看,此处CHARINDEX返回各个地市在“广州、深圳、东莞、佛山、汕头、珠海”字符串中的位置(比如深圳在第4个字符的位置,汕头在第13个字符的位置等),然后使用ORDER
BY 对返回的整数值进行排序,进而实现自定义排序的功能。
SELECT DISTINCT [地市],CHARINDEX([地市],'广州,深圳,东莞,佛山,汕头,珠海') 位置 FROM [dbo].[广东各地市销量]
备忘
CHARINDEX ( expression1,expression2, [ start_location ] )
简而言之,是要在expression2中寻找字符expression1的起始位置,并以start_location为查找的起始点(常忽略),函数返回一个整数(若没有找到相应字符串,返回“0”)
举例1:SELECT CHARINDEX('_', '华为_WAS-TL10'),返回3;
举例2:SELECT CHARINDEX('RIO', '华为_WAS-TL10'),返回0;
相关文章推荐
- sqlserver使用order by case when进行优先级排序
- mysql 使用order by field() 自定义排序
- VS2010使用扩展方法对List<T>进行随机排序
- 对于集合中的自定义对象使用collections.sort 进行排序,需要实现compartor接口
- 实战c++中的vector系列--使用sort算法对vector<unique_ptr<string>>进行排序(sort函数出错“应输入 2 个参数,却提供了 3 个)
- 数据库之SQL ORDER BY 语句用于对结果集进行排序
- 查询结果按照 'in' 里面的数据排序:order by decode
- 使用Arrays.sort()对自定义的entity按指定属性进行排序。
- Spark排序算法!! 使用java开发 自定义key值 进行二次排序 深入解析!
- usort — 使用用户自定义的比较函数对数组中的值进行排序
- order by field 和 order by INSTR 自定义排序
- (使用STL自带的排序功能进行排序7.3.12)UVA 11057 Exact Sum(在一组数据中找到这么两个数,使得他们的和等于指定数&&且这两个数之间的差值最小)
- 大数据IMF传奇 第19课 spark 二次排序 使用JAVA自定义key 进行二次排序
- Asp.net学习笔记----使用GridView+ObjectDataSource进行自定义分页排序
- HTML5 <video> - 使用 DOM 进行自定义控制示例
- MySQL如何利用索引优化ORDER BY排序语句
- 使用自定义Comparator对TreeSet中的数据进行多条件排序
- GROUP BY ORDER BY 同时使用按时间排序
- Spark 使用sortByKey进行二次排序
- PHP usort 使用用户自定义的比较函数对数组中的值进行排序