下面利用sql函数存储过程来实现的一种大小排序的方法,后面的流水号还是要流水的功能

发布时间:2020-02-27  栏目:数据  评论:0 Comments

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

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

 以前曾写了一个流水号的实现功能,它是在SQL中处理的。可以参考:

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

图片 1

这段时间开发,又涉及到使用流水号功能。不同的条件,使用二种前缀。后面的流水号还是要流水的功能,要求再加上位数已经有所变化了。为了解决此问题,只有添加另外一个自定义函数在sql中。改写如下,可参考:

实例

 

图片 2图片 3udf_SeriesNumber

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

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

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

图片 4图片 5udf_OrderLimitSize

CREATE FUNCTION [dbo].[udf_SeriesNumber]
(
    @Number NVARCHAR(12),  –原来的值
    @Digit INT –流水号的位数
)
RETURNS NVARCHAR(100)
AS
BEGIN
    DECLARE @ReturnValue NVARCHAR(100)
    
    IF (@Number IS NULL)
    SET @ReturnValue = REPLICATE(‘0’, @Digit – 1) + ‘1’
    ELSE
        BEGIN
            DECLARE @nbr NVARCHAR(6) 
            SET @nbr = CONVERT(NVARCHAR,(CONVERT(INT, RIGHT(@Number, @Digit)) + 1)) 
            SET @nbr = REPLICATE(‘0’, @Digit – LEN(@nbr)) + @nbr 
            SET @ReturnValue = @nbr 
        END
    RETURN @ReturnValue
END

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

 

相关文章

留下评论

网站地图xml地图