手机
当前位置:查字典教程网 >编程开发 >mssql数据库 >正解SQLSEVER 2005 sql排序(按大小排序)
正解SQLSEVER 2005 sql排序(按大小排序)
摘要:今天在论坛上看到一个问题,如下:解决这个问题,Insus.NET写了一个函数,可以方便以后的扩展,如果数值出现TB或是或更高时,可以只改这个...

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

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

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

执行结果:

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

【正解SQLSEVER 2005 sql排序(按大小排序)】相关文章:

SQL SERVER 2008 中三种分页方法与比较

图文详解SQL Server 2008 R2安装配置方法

SQLServer 2005 控制用户权限访问表图文教程

SQL Server 2005 镜像构建手册(sql2005数据库同步镜像方案)

SQL Server 2008 备份数据库、还原数据库的方法

MSSQL 2005 安全设置图文教程

SQL Server 2005 数据维护实务

SQL2005日志收缩方法

使用SQLSERVER 2005/2008 递归CTE查询树型结构的方法

SQL SERVER 的SQL语句优化方式小结

精品推荐
分类导航