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

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

 

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

执行结果:

时间: 2024-11-08 19:20:17

正解SQLSEVER 2005 sql排序(按大小排序)_mssql2005的相关文章

求求大神帮我-sql 排序 按照文本 和数字大小排序

问题描述 sql 排序 按照文本 和数字大小排序 如果是字段中 是字符串加数字组合成的 怎么把它们按照顺序截取成 字符和数字 放在自己定义的列, 比如说 发文2012.3.4号 截取成 "发文" 放到--col1 "2012.3" 放到 col2 " ." 放到 col3 "4" 放到col4 "号" 放到 col5 截取不了那么多列就留空 ,然后排序 解决方案 找到规律,用正则表达式来截取. 解决方案二:

Java中自然排序和比较器排序详解_java

前言 当指执行插入排序.希尔排序.归并排序等算法时,比较两个对象"大小"的比较操作.我们很容易理解整型的 i>j 这样的比较方式,但当我们对多个对象进行排序时,如何比较两个对象的"大小"呢?这样的比较 stu1 > stu2 显然是不可能通过编译的.为了解决如何比较两个对象大小的问题,JDK提供了两个接口 java.lang.Comparable 和 java.util.Comparator . 一.自然排序:java.lang.Comparable C

世上本没有数:正解大数据

招商银行前行长马蔚华推荐:"涂子沛先生的<数据之巅>通过追溯梳理美国的数据历史.展望人类的数据未来 ,给中国社会提出了一个数据时代的新命题--如何构建数据文化?本书引人入胜.发人深思,是不可不读的好书.". 节标题"世上本没有数:正解大数据" 传统意义上的"数据",是指"有根据的数字",数字之所以产生,是因为人类在实践中发现,仅仅用语言.文字和图形来描述这个世界是不精确的,也是远远不够的.例如,有人问"姚

专注才是正解 说说如何打造属于自己的“小而美”网站

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 最近一个词很火,那就是"小而美";在淘宝网中,也看到了淘宝正在努力的宣传这个名词,为我们展现了很多小而美的网站,而笔者点击进去之后,发现更多的是关于这些店铺的特色,比如说首先介绍店铺的发展过程,然后有哪些值得学习的地方,自己的产品有哪些优势,在这些介绍自己的店铺中,都将自己的产品进行营销最大化,提供了很大的空间去发挥.然后

win7系统如何设置让文件夹按大小排序

  win7系统如何设置让文件夹按大小排序: 1.在资源管理器中右击,在弹出的菜单里选择"分组依据"下的"更多"; 2.在"选择详细信息"对话框中,选择"大小"; 3.在资源管理器中右击,在弹出的菜单里选择"排序方式"下的"大小"; 4.这个时候你也许认为就解决了问题,WIN7如何单单这样的吧,也算不上进化,不要忘记"分组依据",同样在资源管理器中右击,在弹出的菜单里

c语言编程-C语言编程,拜托了,各位大侠,求正解,!!!

问题描述 C语言编程,拜托了,各位大侠,求正解,!!! **** 编程模拟一物体沿斜面加速下滑并在水平面逐渐减速(如图3所示)的物理过程.并给出各个图标的内容或设置. ****

遍历-两个java数组比大小排序

问题描述 两个java数组比大小排序 举个例子,我现在有两个集合数组 A ={32,43,28,3,67,20, 40,0, 59 } B = {3 ,45, 18 ,83 ,30 ,28 ,40,56 ,25} 我要对两个集合数组的大小进行一 一的比较,最后整合到一个大集合数组C中,数字大的排的前面,数字小的在后面,如果AB有数字相同的,那将A组里面的数字排到B前面.求大神帮忙怎么用循环遍历来写这一段代码. 解决方案 上面写成了从小到大排序了,不好意思 public static int[]

oracle 数据库 archar 类型 存放的是数字值,怎么按数字大小排序

问题描述 oracle 数据库 archar 类型 存放的是数字值,怎么按数字大小排序 select stu.numstu.namestu.class_idstu.class_name from student stuclass cs on cs.class_id=stu.class_idorder by stu.num 这个语句要按 stu.num 排序,但是数据库类型是varchar存放的是数字,怎么按大小排序,求助好心人,.. 解决方案 Collections.sort(queryList

积分墙-广告列表积分大小排序

问题描述 广告列表积分大小排序 举例: 我想在一个列表里添加两个积分墙广告列表A和B, 现在需要对A和B里面的列表广告进行排序,积分高的就排在前面,积分低的就排在后面,我现在的思路是将A和B添加到一个大列表C里,然后对C整个排序,但是具体不知道怎么写了,因为我是根据积分列表里面对象的积分值字段进行比较大小的,有点搞不懂,不会写了,下面是我们的代码案例,求大神帮忙看看 List alist = new ArrayList(); List blist = new ArrayList(); List