章節排序問題
章節排序問題
我們知道,一般篇幅較大的書籍,都分為很多章,每章下又有很多節,還有小節等。其層次的關係都是以這種方式來表達的:
1
1.1
1.1.1
...
2
2.1
每個數值之間由點分隔。要對其按照正常的章節順序做排序。
假設如下資料:
SQL> select * from t;
COL
---------------------------------------------------------------------------
1.2.5
1.2.10
1.10.1
1.2.4
1.10.2
2
1
1.1
2.1
22.333.1
1.1.1
1.1.2
1.2
13 rows selected
常見的方法是先將字串中的數字按照點分別取出來,然後依次對其排序。
但其限制也很明顯,就是隻能固定分段數,對於變化的情況處理會出現問題。
如下:
select * from t
order by regexp_substr(col, '([^.]+)',1,1),
regexp_substr(col, '([^.]+)',1,2),
regexp_substr(col, '([^.]+)',1,3)
在tom的blog上看到一遍短文,介紹了另一種方法。其原理是利用字串的
排序方式。固定長度排序,如下:
001
002
010
所以,只要對分段中的每個數值都給予固定長度,補足者補0,這樣就能滿足
此類排序要求。現在以固定長度8作為例子:
select col, regexp_replace(replace('.'||col, '.', '.00000000'), '0+([^\.]{8})', '\1') from t
order by regexp_replace(replace('.'||col, '.', '.00000000'), '0+([^\.]{8})', '\1')
排序結果如下:
SQL> select col, regexp_replace(replace('.'||col, '.', '.00000000'), '0+([^\.]{8})', '\1') from t
2 order by regexp_replace(replace('.'||col, '.', '.00000000'), '0+([^\.]{8})', '\1')
3 /
COL REGEXP_REPLACE(REPLACE('.'||CO
--------------------------------------------------------------------------- --------------------------------------------------------------------------------
1 .00000001
1.1 .00000001.00000001
1.1.1 .00000001.00000001.00000001
1.1.2 .00000001.00000001.00000002
1.2 .00000001.00000002
1.2.4 .00000001.00000002.00000004
1.2.5 .00000001.00000002.00000005
1.2.10 .00000001.00000002.00000010
1.10.1 .00000001.00000010.00000001
1.10.2 .00000001.00000010.00000002
2 .00000002
2.1 .00000002.00000001
22.333.1 .00000022.00000333.00000001
13 rows selected
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12932950/viewspace-741448/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 第二章 :查詢與排序-------遞迴經典問題——漢諾塔問題排序遞迴
- 字串排序問題字串排序
- group by 排序問題排序
- Collections排序問題!!排序
- 中文排序 問題排序
- oracle中排序問題Oracle排序
- Array.sort排序問題排序
- 彩虹排序 | 荷蘭旗問題排序
- python list 排序問題Python排序
- connect by 的排序問題排序
- 第三章:查詢與排序(下)----------- 3.27 用計數排序解決員工年齡問題排序
- 習題筆記 錢能 第3章節筆記
- 習題筆記 錢能 第4章節筆記
- 習題筆記 錢能 第5章節筆記
- 第三章:查詢與排序(下)----------- 3.29 題解:判斷陣列的包含問題排序陣列
- 【SQL 學習】排序問題之order by與索引排序SQL排序索引
- 面試題:陣列按列排序的問題面試題陣列排序
- websphere 受管節點問題Web
- C語言解決排序問題C語言排序
- 單連結串列的排序問題排序
- 這就是選擇排序的問題排序
- 分頁查詢的排序問題排序
- 索引無法消除排序的問題索引排序
- SQL SERVER和ORACLE的排序問題SQLServerOracle排序
- 第19章405頁: NOT NULL問題Null
- JDBC章節總結JDBC
- 第二章 :查詢與排序-------希爾排序排序
- 分治思想--快速排序解決TopK問題排序TopK
- 諮詢一個資料排序問題排序
- OpenStack 介面開發中的排序問題排序
- 分頁查詢的排序問題(二)排序
- 關於mysql5.6 的排序問題.MySql排序
- 關於第2章執行問題
- benq大哥,第七章問題求教ENQ
- 關於全問檢索按照日期的排序問題排序
- 前言和章節結構
- 民訴章節體系
- vue 元件(component)命名的小細節問題(大小寫問題)Vue元件