• 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)

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

  • 相关阅读:
    1.1/1.1.1-玩转Python3金融API应用-easyutils的Readme文件
    1-玩转Python3金融API应用-查阅easytrader家族系列模块
    0-玩转Python3金融API应用-学习查阅API资料的重要性及怎样学
    一句sql搞定身份证校验位
    python爬虫--爬取某网站电影信息并写入mysql数据库
    Mysql简单笔记
    python爬虫--爬取某网站电影下载地址
    android dalvik heap管理分析
    dlmalloc 简析
    low memory killer配置的思考
  • 原文地址:https://www.cnblogs.com/cyz1980/p/1617662.html
Copyright © 2020-2023  润新知