威尼斯www.9778.com-威尼斯正版官方网站

正解SQLSEVER 2005 sql排序

日期:2020-03-01编辑作者:数据库

下面利用sql函数存储过程来实现的一种大小排序的方法

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

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

图片 1

实例

 

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])

解决这个问题,Insus.NET写了一个函数,可以方便以后的扩展,如果数值出现TB或是或更高时,可以只改这个函数即可。

图片 2图片 3udf_OrderLimitSize

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])

 

执行结果:

图片 4

 

本文由威尼斯www.9778.com发布于数据库,转载请注明出处:正解SQLSEVER 2005 sql排序

关键词:

sql 删除重复记录未有高低关系时,管理重复值

sql 删除重复记录没有大小关系时,处理重复值 删除重复数据sql语句 方法一 -- -- (roy)生成 假设有重复的字段为name,a...

详细>>

SQL SERVER 2005中如何获取日期(一个月的最后一日、一年的第一日

mssql server 常用日期函数 那是总括5个月第一天的SQL 脚本:   SELECT DATEADD(mm, DATEDIFF(mm,0,getdate(State of Qatar卡塔尔(قطر‎...

详细>>

Node.js与Sails~Model数据模型

写在前面 本来这个东西,我是不想在这里总结的,今天有初学者的朋友问我了,那就不得不说说了,你肯定也踩过这...

详细>>

小写金额转换成大写

我们日常开发业务系统中,作为统计报表中,特别是财务报表,显示中文金额经常遇到。 转换大小写的方法有很多,...

详细>>