您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息

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

2024/4/17 8:10:31发布3次查看
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) 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])
执行结果:
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录