• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    正解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 数据库服务各种无法启动问题的解决办法(详解)
    上一篇:SQLServer 查询当前服务器有多少连接请求的语句
    下一篇:SQLServer2005与SQLServer2008数据库同步图文教程
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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