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