zoukankan      html  css  js  c++  java
  • 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)

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

  • 相关阅读:
    vue 跨域访问http
    vue 生命周期小结
    koa的教程
    spoj104 HIGH
    loj2026 「JLOI / SHOI2016」成绩比较
    loj2024「JLOI / SHOI2016」侦查守卫
    loj2016 「SCOI2016」美味
    loj2014 「SCOI2016」萌萌哒
    loj2013 「SCOI2016」幸运数字
    loj2012 「SCOI2016」背单词
  • 原文地址:https://www.cnblogs.com/cyz1980/p/1617662.html
Copyright © 2011-2022 走看看