正解SQLSERVER 2005 sql排序(按大小排序)
更新時間:2021年09月18日 10:07:23 投稿:mdxy-dxy
Insus.NET寫了一個函數,可以方便以后的擴展,如果數值出現TB或是或更高時,可以只改這個函數即可。
今天在論壇上看到一個問題,如下:
解決這個問題,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í)行結果:
相關文章
Microsoft Sql server2005的安裝步驟圖文詳解及常見問題解決方案
這篇文章主要介紹了Microsoft Sql server2005的安裝步驟圖文詳解及常見問題解決方案的相關資料,需要的朋友可以參考下2016-05-05
Sql server 2005安裝時ASP.Net版本注冊要求警告的解決方法
這篇文章主要介紹了Sql server 2005安裝時ASP.Net版本注冊要求警告的解決方法,需要的朋友可以參考下2015-01-01
sqlserver 存儲過程中的top+變量使用分析(downmoon)
sqlserver 存儲過程中的top+變量使用分析(downmoon) ,需要的朋友可以參考下。2011-05-05
簡單實用SQL腳本Part SQLServer 2005 鏈接服務器
SQL Server 2005版本的SSMS中已經有了 服務器對象->鏈接服務器 的功能點,用戶首先創(chuàng)建一個遠程DB的鏈接對象,之后就可以像本地表一樣執(zhí)行表的DML了。2010-09-09

