正解SQLSERVER 2005 sql排序(按大小排序)
今天在論壇上看到一個問題,如下:
解決這個問題,Insus.NET寫了一個函數(shù),可以方便以后的擴(kuò)展,如果數(shù)值出現(xiàn)TB或是或更高時,可以只改這個函數(shù)即可。
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的數(shù)值為返回NULL
IF (LEN(@Ov) <= 2)
RETURN NULL
--宣告兩個變量
DECLARE @v DECIMAL(18,6),@n DECIMAL(18,6)
--判斷最后兩位數(shù)是否為下面這些單位
IF (RIGHT(@Ov,2) NOT IN ('TB','GB','MB','KB'))
RETURN NULL
--去掉最后兩位數(shù)之后,把值轉(zhuǎn)為DECIMAL數(shù)據(jù)類型
SET @n = CONVERT(DECIMAL(18,6),LEFT(@Ov, LEN(@Ov) - 2))
--判斷截除最后兩位數(shù)之后,使用ISNUMERIC判斷是否為有效的數(shù)值,如果不是返回NULL
IF (ISNUMERIC(@n) = 0)
RETURN NULL
--下面做單位轉(zhuǎn)算,如果遇上有新單位時,可以作相應(yīng)添加
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
下面為了應(yīng)用這個函數(shù),例舉例子:
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í)行結(jié)果:
相關(guān)文章
Microsoft Sql server2005的安裝步驟圖文詳解及常見問題解決方案
這篇文章主要介紹了Microsoft Sql server2005的安裝步驟圖文詳解及常見問題解決方案的相關(guān)資料,需要的朋友可以參考下2016-05-05Sql server 2005安裝時ASP.Net版本注冊要求警告的解決方法
這篇文章主要介紹了Sql server 2005安裝時ASP.Net版本注冊要求警告的解決方法,需要的朋友可以參考下2015-01-01SqlServer 2005的排名函數(shù)使用小結(jié)
Sql Server 2005 引入了4個新的排名函數(shù):ROW_NUMBER、BANK、DENSE_RANK和NTILE。2010-04-04sqlserver 存儲過程中的top+變量使用分析(downmoon)
sqlserver 存儲過程中的top+變量使用分析(downmoon) ,需要的朋友可以參考下。2011-05-05sql2005數(shù)據(jù)導(dǎo)出方法(使用存儲過程導(dǎo)出數(shù)據(jù)為腳本)
在數(shù)據(jù)庫中使用下面的腳本創(chuàng)建存儲過程,然后執(zhí)行存儲過程,參數(shù)為表名,就可以把表的數(shù)據(jù)輸出為SQL腳本2014-01-01簡單實用SQL腳本Part SQLServer 2005 鏈接服務(wù)器
SQL Server 2005版本的SSMS中已經(jīng)有了 服務(wù)器對象->鏈接服務(wù)器 的功能點(diǎn),用戶首先創(chuàng)建一個遠(yuǎn)程DB的鏈接對象,之后就可以像本地表一樣執(zhí)行表的DML了。2010-09-09SQL2005CLR函數(shù)擴(kuò)展-繁簡轉(zhuǎn)換的實現(xiàn)代碼
本篇文章是對繁簡轉(zhuǎn)換的實現(xiàn)代碼進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06