[英]SQL Oracle Sort string (numbers) and (letters with numbers)
我是oracle的新手,我遇到了問題。 我有一個名為file_id的列。
當我按順序排序時,它會排序
1
1
10
100
11
11
110
114
12
300
31
4200
B14
B170
B18
編輯:我希望它以這種方式排序。
1
1
10
11
11
12
31
100
300
4200
B14
B18
B170
以下答案非常有效。 我現在遇到的其他問題......我的記錄是空白的。 我怎么能在最后制作空白唱片?
1
1
10
11
11
12
31
100
300
4200
BLANK
BLANK
BLANK
BLANK
BLANK
B14
B18
B170
謝謝您的幫助。
select column
from table
order by
regexp_substr(column, '^\D*') nulls first,
to_number(regexp_substr(column, '\d+'))
這是一個老問題,但它是谷歌的第一個熱門,所以我想我會分享另一種解決方案:
select column
from table
order by
LPAD(column, 10)
LPAD函數用空格填充字符串的左側,以便以數字方式對結果進行排序。 這適用於非數字值,空值將最后排序。 如果您知道要排序的字符串的最大長度(您可能需要調整第二個參數以滿足您的需要),這很有效。
資料來源: http : //www.techonthenet.com/oracle/questions/sort1.php
編輯 :
我注意到雖然我的解決方案適合我的情況,但輸出與接受的答案略有不同( http://www.sqlfiddle.com/#!4/d935b8/2/0 ):
1
1
10
11
11
12
31
100
110
114
300
A14
A18
4200
A170
(null)
(null)
4200應該在300之后。對於我的情況,這已經足夠了,但情況可能並非總是如此。
基於以前的解決方案:
SELECT column
FROM table
ORDER BY LPAD(column, (SELECT MAX(LENGTH(column)) FROM table)) ASC
這種方法的優點是您不需要知道表列大小。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.