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

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

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

2024-08-31 01:01:06
字體:
來源:轉載
供稿:網友

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

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

 

解決這個問題,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])


執(zhí)行結果:

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 扎囊县| 普定县| 阿巴嘎旗| 德阳市| 武鸣县| 稻城县| 临城县| 巴南区| 安吉县| 黄陵县| 天镇县| 钦州市| 昂仁县| 重庆市| 丹凤县| 桂东县| 五常市| 华阴市| 保康县| 宣威市| 涡阳县| 阳曲县| 长武县| 新建县| 沧州市| 彭水| 大冶市| 浦东新区| 堆龙德庆县| 富蕴县| 友谊县| 砀山县| 弋阳县| 遵义县| 白河县| 蕲春县| 台北县| 略阳县| 公主岭市| 龙州县| 梁河县|