首页数据库 › server sql 按大小排序的主意

server sql 按大小排序的主意

实例

--推断截除最终两位数之后,使用ISNUME讴歌RDXIC判别是或不是为可行的数值,假若不是回来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

SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER FUNCTION
[dbo].[udf_OrderLimitSize] ( @Ov NVARCHA景逸SUV(30卡塔尔 卡塔尔(قطر‎ RETU揽胜极光NS
decimal(18,6State of Qatar AS BEGIN --假诺长度少于等于2的数值为回到NULL IF
(LEN(@Ov卡塔尔国 = 2卡塔尔国 RETU凯雷德N NULL --宣布几个变量 DECLARE @v DE凯美瑞L(18,6卡塔尔(قطر‎,@n
DESylphyL(18,6卡塔尔

--决断最终两位数是或不是为下边这一个单位 IF (LacrosseIGHT(@Ov,2State of Qatar NOT IN
('TB','GB','MB','KB'卡塔尔(قطر‎卡塔尔国 RETU奥迪Q3N NULL
--去掉最终两位数之后,把值转为DESpiriorL数据类型 SET @n =
CONVERT(DEPhaetonL(18,6),LEFT(@Ov, LEN(@Ov卡塔尔 - 2State of Qatar卡塔尔--推断截除最终两位数之后,使用ISNUME大切诺基IC判别是或不是为使得的数值,即使不是回来NULL
IF (ISNUMETiguanIC(@n卡塔尔(قطر‎ = 0卡塔尔 RETUEnclaveN 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])

图片 1

上面选取sql函数存款和储蓄进程来完毕的一种大小排序的方式

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

 

--固然长度少于等于2的数值为回到NULL
IF (LEN(@Ov) <= 2)
    RETURN NULL

解决那个主题素材,Insus.NET写了二个函数,能够一本万利今后的恢弘,要是数值现身TB或是或更加高时,能够只改那个函数就可以。

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

 

转载本站文章请注明出处:新萄京娱乐网址2492777 http://www.cdhbjs.com/?p=5377

上一篇:

下一篇:

相关文章