server sql 按大小排序的方法

SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION
[dbo].[udf_OrderLimitSize] ( @Ov NVARCHA讴歌RDX(30卡塔尔 卡塔尔(قطر‎ RETU凯雷德NS
decimal(18,6State of Qatar AS BEGIN –如果长度少于等于2的数值为回到NULL IF
(LEN(@Ov卡塔尔国 = 2卡塔尔(قطر‎ RETUXC60N NULL –公布八个变量 DECLARE @v DEPhaetonL(18,6卡塔尔(قطر‎,@n
DEAccordL(18,6卡塔尔

–判别最后两位数是或不是为上边那个单位 IF (KugaIGHT(@Ov,2卡塔尔(قطر‎ NOT IN
(‘TB’,’GB’,’MB’,’KB’卡塔尔国卡塔尔 RETU途达N NULL
–去掉最后两位数之后,把值转为DEATENZAL数据类型 SET @n =
CONVERT(DEFoxL(18,6卡塔尔国,LEFT(@Ov, LEN(@Ov卡塔尔国 – 2卡塔尔国)–剖断截除最终两位数之后,使用ISNUMEHighlanderIC剖断是不是为可行的数值,要是还是不是回到NULL
IF (ISNUMELX570IC(@n卡塔尔(قطر‎ = 0) RETU奇骏N 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

    –结合地点的流水号爆发的自定义函数,与前缀组合,得到流水号。爆发6位的水流号
    RETURN @Prefixion + [dbo].[udf_SeriesNumber] (@LastMeetingNumber,6)
END 

下面采纳sql函数存款和储蓄进程来贯彻的一种大小排序的艺术

这段时间支付,又涉嫌到应用流水号作用。不一样的法规,使用二种前缀。后边的流水号依然要流水的职能,必要再拉长位数已经拥有变动了。为了消除此难题,唯有增添此外三个自定义函数在sql中。改写如下,可参看:

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

接下去,就足以达成会场预的的议会流水号效率,也许现在又来一个流水号的,依旧利用方面包车型大巴自定义函数。

实例

 

有少数个开会地点,而首先个会议场面是贰个设想开会地点,只可以当作测量试验使用,别的的会议场面全充任正式的会议场馆供预订。那一个预约的出来的流水号必要区分,虚构的会议流水号如下:#000001,#000002,#000003,…,#999999。而专门的学问的集会流水号如:M000001,M000002,M000003,…,M999999。

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

上面包车型大巴次第是产生流水号的落实效果与利益: 

 

CREATE FUNCTION [dbo].[udf_SeriesNumber]
(
    @Number NVARCHA奥迪Q3(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

图片 1图片 2udf_GetMeetingNumber

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE FUNCTION [dbo].[udf_GetMeetingNumber]
(    
    @MeetingRoomId SMALLINT  
)
RETURNS NVARCHAR(20)
AS
BEGIN
    
    –宣布几个变量,八个是流水号的前缀,起头化其值。另个是将保留最新的议会号码。    
    DECLARE @Prefixion NVARCHAR(2) = ‘M’, @LastMeetingNumber NVARCHAR(20)

    IF (@MeetingRoomId = 1)
    BEGIN
        –若是是诬捏的会议地方,去会场预约的记录表,找到最新的集会号码        
        SELECT TOP 1 @LastMeetingNumber = [Meeting_Number] FROM [dbo].[MeetingRoomBooking] WHERE [MeetingRoomId] = @MeetingRoomId ORDER BY [MeetingRoomBookingId] DESC
        –设定前缀        
        SET @Prefixion = ‘#’
    END
    ELSE
        –假设是别的的会场,找到最新的集会号码
        SELECT TOP 1 @LastMeetingNumber = [Meeting_Number] FROM [dbo].[MeetingRoomBooking] WHERE [MeetingRoomId] <> 1  ORDER BY [MeetingRoomBookingId] DESC

图片 3图片 4udf_SeriesNumber

 从前曾写了一个流水号的兑现效果与利益,它是在SQL中拍卖的。能够参见:

发表评论

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