菜单

按大小排序的方法

2020年3月10日 - 数据网络
按大小排序的方法

实例

图片 1图片 2udf_OrderLimitSize

下面利用sql函数存储过程来实现的一种大小排序的方法

–如果长度少于等于2的数值为返回NULL
IF (LEN(@Ov) <= 2)
    RETURN NULL

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

图片 3

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])

–判断截除最后两位数之后,使用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

–判断最后两位数是否为下面这些单位
IF (RIGHT(@Ov,2) NOT IN (‘TB’,’GB’,’MB’,’KB’))
    RETURN NULL

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

–宣告两个变量
DECLARE @v DECIMAL(18,6),@n DECIMAL(18,6)

 

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图