首页数据库正解SQLSERVER 2005 sql排序(按大小排序)

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

时间2024-02-28 23:52:03发布访客分类数据库浏览208
导读:收集整理的这篇文章主要介绍了正解SQLSERVER 2005 sql排序(按大小排序 ,觉得挺不错的,现在分享给大家,也给大家做个参考。 今天在论坛上看到一个问题,如下: 解决这个问题,...
收集整理的这篇文章主要介绍了正解SQLSERVER 2005 sql排序(按大小排序),觉得挺不错的,现在分享给大家,也给大家做个参考。

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

 

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

执行结果:

您可能感兴趣的文章:
  • SQL SERVER数据库重建索引的方法
  • sqlserver实现更改字段名
  • SQLServer导入数据图文方法
  • SQL Server 2005 Express 安装失败解决办法
  • SQL Server2008r2 数据库服务各种无法启动问题的解决办法(详解)

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 正解SQLSERVER 2005 sql排序(按大小排序)
本文地址: https://pptw.com/jishu/632109.html
SQLServer APPLY表运算符使用介绍 SQLServer2005与SQLServer2008数据库同步图文教程

游客 回复需填写必要信息