国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 荥阳市| 玛多县| 英德市| 合川市| 南木林县| 连平县| 清丰县| 泌阳县| 贵定县| 临清市| 陵川县| 错那县| 永登县| 锡林郭勒盟| 武胜县| 丰都县| 安仁县| 濉溪县| 淮安市| 运城市| 巴青县| 建始县| 资溪县| 竹北市| 揭阳市| 永新县| 满洲里市| 浙江省| 甘孜县| 泾阳县| 旬阳县| 浑源县| 柳州市| 富裕县| 古蔺县| 沂源县| 崇文区| 闽清县| 茂名市| 都江堰市| 汪清县|