国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

正解SQLSEVER 2005 sql排序(按大小排序)

2020-10-30 19:09:24
字體:
來源:轉載
供稿:網友

今天在論壇上看到一個問題,如下:

 

解決這個問題,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
--如果長度少于等于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

下面為了應用這個函數,例舉例子:
復制代碼 代碼如下:

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

執行結果:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汝阳县| 葵青区| 嘉定区| 永丰县| 靖西县| 翼城县| 五指山市| 江源县| 丽水市| 武鸣县| 隆昌县| 兰州市| 平塘县| 太仓市| 兰坪| 武功县| 蓝山县| 永靖县| 海宁市| 瓦房店市| 和硕县| 阿克陶县| 乐业县| 天柱县| 丹凤县| 赫章县| 客服| 博野县| 林西县| 陵川县| 西昌市| 凤山县| 安庆市| 清苑县| 兴义市| 冀州市| 冀州市| 湟中县| 石柱| 昆明市| 烟台市|