server sql 按大小排序的主意

作者:必威体育网页进入    发布时间:2020-05-02 16:11    浏览:103 次

[返回]

实例

 

SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION [dbo].[udf_OrderLimitSize] ( @Ov NVARCHA传祺(30State of Qatar 卡塔尔国 RETUPAJERONS decimal(18,6卡塔尔国 AS BEGIN --假使长度少于等于2的数值为回去NULL IF (LEN(@Ov卡塔尔(قطر‎ = 2卡塔尔国 RETUEvoqueN NULL --发表四个变量 DECLARE @v DEINSPIREL(18,6卡塔尔(قطر‎,@n DECamaroL(18,6卡塔尔

--决断最后两位数是或不是为下边这个单位 IF (兰德酷路泽IGHT(@Ov,2卡塔尔 NOT IN ('TB','GB','MB','KB'State of QatarState of Qatar RETU奥迪Q3N NULL --去掉最终两位数之后,把值转为DESylphyL数据类型 SET @n = CONVERT(DE英朗L(18,6State of Qatar,LEFT(@Ov, LEN(@OvState of Qatar - 2State of Qatar卡塔尔国--判别截除最终两位数之后,使用ISNUME奥迪Q5IC判定是不是为有效的数值,假如不是回来NULL IF (ISNUMEPAJEROIC(@n卡塔尔国 = 0卡塔尔国 RETU讴歌ZDXN NULL --下边做单位转算,若是遇上有新单位时,能够作相应拉长 IF (@Ov LIKE '%TB'State of Qatar 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

下边为了选拔这些函数,例比如子:

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或是或越来越高时,能够只改那么些函数就可以。

上边选用sql函数存款和储蓄进程来促成的一种大小排序的法子

--发表三个变量
DECLARE @v DECIMAL(18,6),@n DECIMAL(18,6)

图片 1图片 2udf_OrderLimitSize

--去掉最终两位数之后,把值转为DEINSPIREL数据类型    
SET @n = CONVERT(DECIMAL(18,6),LEFT(@Ov, LEN(@Ov) - 2))

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

实行结果:

今日在论坛上见到二个标题,如下:

搜索