某某茶叶有限公司欢迎您!
金沙棋牌在线 > 必赢棋牌官网 > server sql 按大小排序的方法

server sql 按大小排序的方法

时间:2020-03-13 15:45

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

GO

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

-- =============================================
-- Author:        <Author,,rx.tang>
-- Create date: <Create Date, ,>
-- Description:    <Description, ,get order value>
-- =============================================
CREATE FUNCTION [dbo].[getOrderValue]
(
    -- Add the parameters for the function here
    @v VARCHAR(50)
)
RETURNS VARCHAR(8000)
AS
BEGIN
 
 DECLARE @r VARCHAR(8000)
 DECLARE @number VARCHAR(50)
必赢棋牌官网, DECLARE @splite INT
 SET @r =''
 IF( @v is null or LEN(@v) = 0)
 BEGIN
     RETURN ''
 END
 WHILE(1=1)
 BEGIN
      set @splite =  patindex('%[0-9]%',@v)
     IF(@splite > 0)
     BEGIN
         SET @r  =@r + LEFT(@v,@splite-1)
         SET @v = RIGHT(@v, LEN(@v)- @splite +1 )
         SET @splite =  patindex('%[^0-9]%',@v)
         IF(@splite > 0)
         BEGIN
             SET @number = LEFT(@v,@splite-1)
             SET @r = @r + RIGHT('000000000000000000000000' + @number,10)
             SET @v = RIGHT(@v, LEN(@v)- @splite +1 )
         END
         ELSE
             BEGIN
                 SET @r = @r + RIGHT('000000000000000000000000' + @v,10)
                 BREAK
             END
     END
     ELSE
         BEGIN
             BREAK
         END
 END
 
 
 
 RETURN @r