• [织梦吧]唯一域名:www.dedecms8.com,织梦DedeCMS学习平台.

当前位置: > 编程与数据库 > mssql2005教程 >

正解SQLSEVER 2005 sql排序(按大小排序)

来源: www.dedecms8.com 编辑:织梦吧 时间:2012-07-01点击:

  Insus.NET写了一个函数,可以方便以后的扩展,如果数值出现TB或是或更高时,可以只改这个函数即可。

今天在论坛上看到一个问题,如下:

解决这个问题,Insus.NET写了一个函数,可以方便以后的扩展,如果数值出现TB或是或更高时,可以只改这个函数即可。

  1. SET ANSI_NULLS ON  
  2. GO  
  3. SET QUOTED_IDENTIFIER ON  
  4. GO  
  5. ALTER FUNCTION [dbo].[udf_OrderLimitSize]  
  6. (  
  7. @Ov NVARCHAR(30)  
  8. )  
  9. RETURNS decimal(18,6)  
  10. AS  
  11. BEGIN  
  12. --如果长度少于等于2的数值为返回NULL  
  13. IF (LEN(@Ov) <= 2)  
  14. RETURN NULL  
  15. --宣告两个变量  
  16. DECLARE @v DECIMAL(18,6),@n DECIMAL(18,6)  
  17.  
  18. --判断最后两位数是否为下面这些单位  
  19. IF (RIGHT(@Ov,2) NOT IN ('TB','GB','MB','KB'))  
  20. RETURN NULL  
  21. --去掉最后两位数之后,把值转为DECIMAL数据类型  
  22. SET @n = CONVERT(DECIMAL(18,6),LEFT(@Ov, LEN(@Ov) - 2))  
  23. --判断截除最后两位数之后,使用ISNUMERIC判断是否为有效的数值,如果不是返回NULL  
  24. IF (ISNUMERIC(@n) = 0)  
  25. RETURN NULL  
  26. --下面做单位转算,如果遇上有新单位时,可以作相应添加  
  27. IF (@Ov LIKE '%TB')  
  28. SET @v = @n * 1024 * 1024 * 1024  
  29. IF (@Ov LIKE '%GB')  
  30. SET @v = @n * 1024 * 1024  
  31. IF (@Ov LIKE '%MB')  
  32. SET @v = @n * 1024  
  33. IF (@Ov LIKE '%KB')  
  34. SET @v = @n  
  35. RETURN @v  
  36. 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])  

执行结果:

猜你也喜欢看这些...

About D8

  • ©2014 织梦吧(d8) DedeCMS学习交流平台
  • 唯一网址 www.DedeCMS8.com 网站地图
  • 联系我们 1170734538@qq.com ,  QQ