简体   繁体   中英

SQL Oracle Sort string (numbers) and (letters with numbers)

I am new to oracle and I have a problem. I have a column named file_id.

When I do an order by it sorts strings such as

1
1 
10 
100 
11 
11
110 
114
12
300 
31
4200
B14
B170
B18

edit: I would like it to sort this way.

1
1
10
11
11
12
31
100
300
4200
B14
B18 
B170

The answer below works perfectly. Only other problem I ran into now..I have records that are blank. How could I make the blank records order at the end?

1 
1 
10 
11 
11 
12 
31 
100 
300 
4200 
BLANK 
BLANK 
BLANK 
BLANK 
BLANK 
B14 
B18 
B170

Thank you for your help.

select column 
from table
order by 
  regexp_substr(column, '^\D*') nulls first,
  to_number(regexp_substr(column, '\d+'))

fiddle

This is an old question, but it was the first hit on google so I thought I'd share an alternative solution:

select column
from table
order by 
  LPAD(column, 10)

The LPAD function pads the left-side of the string with spaces so that the results will be sorted numerically. This works for non-numeric values, and null values will be sorted last. This works well if you know the maximum length of the strings to be sorted (you may need to adjust the second parameter to suit your needs).

Source: http://www.techonthenet.com/oracle/questions/sort1.php

EDIT :
I noticed that while my solution works well for my case, the output is slightly different from the accepted answer ( 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 should come after 300. For my situation this is good enough, but this may not always be the case.

Based on the previous solution:

SELECT column
FROM table
ORDER BY LPAD(column, (SELECT MAX(LENGTH(column)) FROM table)) ASC

The advantage of this approach is that you don't need know the table column size.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM