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

榆木4999

榆木4999

2016-02-19 09:50

给自己一点时间接受自己,爱自己,趁着下午茶的时间来学习图老师推荐的正解SQLSEVER 2005 sql排序(按大小排序),过去的都会过去,迎接崭新的开始,释放更美好的自己。

今天在论坛上看到一个问题,如下:

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

解决这个问题,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])

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)

执行结果:

展开更多 50%)
分享

猜你喜欢

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

编程语言 网络编程
正解SQLSEVER 2005 sql排序(按大小排序)

sql2005 根据指定字段排序编号

编程语言 网络编程
sql2005 根据指定字段排序编号

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

mysql 按中文字段排序

编程语言 网络编程
mysql 按中文字段排序

数据排序及如何动态排序

ASP
数据排序及如何动态排序

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

C#中使用快速排序按文件创建时间将文件排序的源码

编程语言 网络编程
C#中使用快速排序按文件创建时间将文件排序的源码

让收藏夹内网站按字母排序

windows 操作系统
让收藏夹内网站按字母排序

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

教你WinXP系统安装后的加速瘦身法

教你WinXP系统安装后的加速瘦身法

php 正则 不包含某字符串的正则表达式

php 正则 不包含某字符串的正则表达式
下拉加载更多内容 ↓