源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2022-03-19 08:54 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:正解SQLSEVER 2005 sql排序(按大小排序)
今天在论坛上看到一个问题,如下: [url=http://www.1sucai.cn/upload/201108/20110829002902364.PNG][img]http://files.jb51.net/upload/201108/20110829002902364.PNG[/img] [/url]   解决这个问题,Insus.NET写了一个函数,可以方便以后的扩展,如果数值出现TB或是或更高时,可以只改这个函数即可。
[u]复制代码[/u] 代码如下:
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
下面为了应用这个函数,例举例子:
[u]复制代码[/u] 代码如下:
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])
执行结果: [img]http://files.jb51.net/upload/201108/20110829002902212.PNG[/img]
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部