SQL Server 2000实现一则按类似VB VAL函数功能排序的案例

                    SQL Server 2000实现一则按类似VB VAL函数功能排序的案例

 

      最近,在项目维护时,碰到对以下的数据进行排序处理:

 

排序前:

  

班级照片名称
机械1班1张三.jpg
机械1班7李四.jpg
机械1班3王五.jpg
财会2班3如花.jpg
财会2班6像花.jpg
财会2班1真花.jpg
体育1班3铁男.jpg
体育1班1猛男.jpg
财会2班10若花.jpg
体育1班30衰男.jpg

 

排序后(要实现的结果):

 

班级照片名称
财会2班1真花.jpg
财会2班3如花.jpg
财会2班6像花.jpg
财会2班10若花.jpg
机械1班1张三.jpg
机械1班3王五.jpg
机械1班7李四.jpg
体育1班1猛男.jpg
体育1班3铁男.jpg
体育1班30衰男.jpg

 

也许有人会说,这还不简单,只要输入"SELECT 班级, 照片名称 FROM [Table] ORDER BY 班级, 照片名称"语句,不就出结果了吗?事实如此吗,请看此SQL语句执行后的结果:

班级照片名称
财会2班10若花.jpg
财会2班1真花.jpg
财会2班3如花.jpg
财会2班6像花.jpg
机械1班1张三.jpg
机械1班3王五.jpg
机械1班7李四.jpg
体育1班1猛男.jpg
体育1班30衰男.jpg
体育1班3铁男.jpg

是不是与预期的结果有很大的出入呢? 怎样解决这问题,实现想要的结果呢?由于SQL Server没有类似VB的VAL函数,因此想实现如上数据的排序,将比较困难。不过,只要执行以下SQL语句就可以了,今天免费赠送了。废话少说,亮代码:

 

SELECT 班级, 照片名称
FROM (SELECT *, CASE WHEN (UNICODE(SUBSTRING(photo, 1, 1)) BETWEEN 48 AND
              57) AND NOT (UNICODE(SUBSTRING(photo, 2, 1)) BETWEEN 48 AND 57)
              THEN SUBSTRING(photo, 1, 1) WHEN (UNICODE(SUBSTRING(photo, 1, 1))
              BETWEEN 48 AND 57) AND (UNICODE(SUBSTRING(photo, 2, 1)) BETWEEN
              48 AND 57) THEN SUBSTRING(photo, 1, 2) END AS photoid
        FROM (SELECT *, LTRIM(照片名称) AS photo
                FROM [TABLE]) l) ll
ORDER BY 班级, CAST(ISNULL(photoid, 0) AS int)

 

没想到一个简单的功能,要写这么复杂的代码。看来,前人"造轮子"没造全,将会给后面的应用开发人员带来不小的烦恼。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值