SQL Server 2005数据库排序的SQL实例解析

数据库 SQL Server
本文我们主要介绍了在SQL Server 2005数据库中对查询出来的字段按大小进行排序的一个SQL实例,通过这个实例让我们一起来了解一下SQL Server 2005排序的方法吧,希望本次的介绍能够对您有所帮助。

SQL Server 2005的数据库操作中,遇到了这样的问题:数据字段是Varchar(50)类型,存的有GB,MB,KB,例如3.3GB,523.6MB,823KB,这种属性,两千多条,怎样对它按大小排序呢?SQL语句该如何写?

解决这个问题,我们可以用函数来实现,因为它可以方便以后的扩展,如果数值出现TB或是或更高时,可以只改这个函数即可。

  1. udf_OrderLimitSize  
  2. SET ANSI_NULLS ON  
  3. GO  
  4. SET QUOTED_IDENTIFIER ON  
  5. GO  
  6. ALTER FUNCTION [dbo].[udf_OrderLimitSize]  
  7. (  
  8.     @Ov NVARCHAR(30)  
  9. )  
  10. RETURNS decimal(18,6)  
  11. AS  
  12. BEGIN 

--如果长度少于等于2的数值为返回NULL

  1. IF (LEN(@Ov) <= 2)  
  2.     RETURN NULL 

--宣告两个变量

  1. DECLARE @v DECIMAL(18,6),@n DECIMAL(18,6) 

--判断***两位数是否为下面这些单位

  1. IF (RIGHT(@Ov,2) NOT IN ('TB','GB','MB','KB'))  
  2.     RETURN NULL 

--去掉***两位数之后,把值转为DECIMAL数据类型    

  1. SET @n = CONVERT(DECIMAL(18,6),LEFT(@Ov, LEN(@Ov) - 2)) 

--判断截除***两位数之后,使用ISNUMERIC判断是否为有效的数值,如果不是返回NULL

  1. IF (ISNUMERIC(@n) = 0)  
  2.     RETURN NULL 

--下面做单位转算,如果遇上有新单位时,可以作相应添加

  1. IF (@Ov LIKE '%TB')  
  2.     SET @v = @n * 1024 * 1024 * 1024  
  3. IF (@Ov LIKE '%GB')  
  4.     SET @v = @n * 1024 * 1024  
  5. IF (@Ov LIKE '%MB')      
  6.     SET @v = @n * 1024   
  7. IF (@Ov LIKE '%KB')      
  8.     SET @v = @n  
  9.     RETURN @v  
  10. END 

下面为了应用这个函数,例举例子:

  1. CREATE TABLE test(id int identity(1,1),size NVARCHAR(50))  
  2. GO  
  3. INSERT INTO [test] values('23.5mb'),('10gb'),('12.7mb'),('8GB')  
  4. go  
  5. SELECT [id],[size] FROM test ORDER BY [dbo].[udf_OrderLimitSize]([size]) 

执行结果:

SQL Server 2005数据库排序的SQL实例解析

关于SQL Server 2005的SQL排序问题的解决方案就介绍这么多了,希望本次的介绍能够对您有所收获!

【编辑推荐】

  1. SSIS工程师为您揭秘SQL Server数据流
  2. SQL Server 2008 MDX学习笔记之理解元数组
  3. SQL Server数据库DataRelation的应用示例详解
  4. SQL Server 2005/2008中的CTE应用之递归查询
  5. SQL Server 2008数据库学习笔记之MDX查询示例
责任编辑:赵鹏 来源: 博客园
相关推荐

2011-08-22 14:00:13

SQL Server 游标调用函数

2010-07-16 14:17:18

SQL Server

2011-08-25 13:10:44

SQL Server 设置自动编号字段

2011-08-25 15:19:25

SQL Server 排序规则

2010-07-22 14:46:41

SQL Server

2010-07-08 15:26:05

SQL Server

2011-08-18 18:03:32

手动卸载SQL Ser

2010-07-12 12:41:16

SQL Server

2011-09-07 15:11:31

SQL Server同步

2010-07-02 10:47:20

SQL Server

2011-08-15 15:40:57

SQL Server 系统数据库

2010-06-28 11:00:46

SQL Server

2010-06-30 13:19:17

SQL Server

2009-04-30 09:56:29

微软SQL Server 缓存依赖

2010-07-20 10:02:41

SQL Server

2011-03-28 15:28:03

SQL Server 数据库

2011-08-11 09:12:31

SQL Server nolock

2011-08-22 12:01:36

SQL Server代码优化

2011-04-06 17:30:41

SQL ServerSQL

2010-07-09 14:30:56

SQL Server
点赞
收藏

51CTO技术栈公众号