正解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])
执行结果:
相关文章
Microsoft Sql server2005的安装步骤图文详解及常见问题解决方案
这篇文章主要介绍了Microsoft Sql server2005的安装步骤图文详解及常见问题解决方案的相关资料,需要的朋友可以参考下2016-05-05Sql server 2005安装时ASP.Net版本注册要求警告的解决方法
这篇文章主要介绍了Sql server 2005安装时ASP.Net版本注册要求警告的解决方法,需要的朋友可以参考下2015-01-01sqlserver 存储过程中的top+变量使用分析(downmoon)
sqlserver 存储过程中的top+变量使用分析(downmoon) ,需要的朋友可以参考下。2011-05-05简单实用SQL脚本Part SQLServer 2005 链接服务器
SQL Server 2005版本的SSMS中已经有了 服务器对象->链接服务器 的功能点,用户首先创建一个远程DB的链接对象,之后就可以像本地表一样执行表的DML了。2010-09-09
最新评论