您的位置:首页 > 数据库

使用ORDER BY & CHARINDEX 进行自定义排序

2017-05-02 10:43 274 查看
       
在SQL SERVER 中,ORDER BY 语句用于根据指定的列对查询记录进行排序,默认按照升序对查询记录进行排序(关键字ASC可以省略),若希望按照降序进行排列,可以在ORDER BY之后使用DESC关键字。

1、使用升序时,默认按汉语首拼音的顺序进行排序。

Dongguan、Foshan、Guangzhou、Shantou、Shenzhen、Zhuhai

USE [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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐