SQLServer2005数据库排序的SQL实例解析

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排序问题的解决方案就介绍这么多了,希望本次的介绍能够对您有所收获!

【编辑推荐】

  1. SSIS工程师为您揭秘SQL Server数据流
  2. SQL Server 2008 MDX学习笔记之理解元数组
  3. SQL Server数据库DataRelation的应用示例详解
  4. SQL Server 2005/2008中的CTE应用之递归查询
  5. SQL Server 2008数据库学习笔记之MDX查询示例

当前标题:SQLServer2005数据库排序的SQL实例解析
新闻来源:http://www.csdahua.cn/qtweb/news3/130153.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网