SQL Server 2000實現一則按類似VB VAL函數功能排序的案例

來源:互聯網
上載者:User

                  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)

沒想到一個簡單的功能,要寫這麼複雜的代碼。看來,前人"造輪子"沒造全,將會給後面的應用開發人員帶來不小的煩惱。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.