簡體   English   中英

SQL Oracle排序字符串(數字)和(帶數字的字母)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM