手机
当前位置:查字典教程网 >编程开发 >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 2005删除日志文件的几种方法小结

SQL Server 2005与sql 2000之间的数据转换方法

SQLServer2008安装程序失败原因一

SQL Server2005 异地备份的多种方法

SQL Server 2008 R2数据库镜像部署图文教程

SQL Server 2005 定时执行SQL语句的方法

利用SQL SERVER 2005数据库镜像实现可用性分析

SQL Server压缩日志及数据库文件大小

SQL Server 2005 数据维护实务

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

精品推荐
分类导航