IT技术网www.itjs.cn

当前位置:首页 > 数据库 > SQl Server > SQL Server 2005数据库排序的SQL实例解析

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

发布时间:2011-08-22 09:55 来源:未知

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

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

udf_OrderLimitSize  SET ANSI_NULLS ON  GO  SET QUOTED_IDENTIFIER ON  GO  ALTER FUNCTION [dbo].[udf_OrderLimitSize]  (      @Ov NVARCHAR(30)  )  RETURNS decimal(18,6)  AS  BEGIN 

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

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

--宣告两个变量

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

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

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

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

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

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

IF (ISNUMERIC(@n) = 0)      RETURN NULL 

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

IF (@Ov LIKE '%TB')      SET @v = @n * 1024 * 1024 * 1024  IF (@Ov LIKE '%GB')      SET @v = @n * 1024 * 1024  IF (@Ov LIKE '%MB')          SET @v = @n * 1024   IF (@Ov LIKE '%KB')          SET @v = @n      RETURN @v  END 

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

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

执行结果:

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

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