?
Solved

Sorting of number in PTO order

Posted on 2009-05-13
4
Medium Priority
?
388 Views
Last Modified: 2013-12-18
Hi ,

I have a table having  only one col. of varchar2 data type .
data are as follows :

1.2
2.0
2.21
8.0
2.2.1
3.0
4.1
3.1
5.1
3.2.4

I want to display is sorted order as :

1.2
2.0
2.2.1
2.21
3.0
3.1
3.2.4
4.1
5.1
8.0

How can I do it
in sql.

!Koushik
0
Comment
Question by:koushikonjob
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
4 Comments
 
LVL 74

Expert Comment

by:sdstuber
ID: 24381927
that's an interesting question because your sample data is sortable  "as is"

select your_column from your_table order by your_column

however, on the assumption that you want to sort your data from left-to-right in numeric order by each dot delimited number then try this...

This could be simplified by using a function for comparing values

I've made the assumption here that you will never have more than 9 numeric pieces to your string if that's not correct then adjust "level < 10" to some number big enough
I've also assumed no one number will be greater than 99 , if that's not correct then adjust "power(100,"  to some number bigger than the largest segment number
 SELECT   str
    FROM   (SELECT   str,
                     cnt,
                     maxcnt,
                     n,
                     TO_NUMBER(SUBSTR(str, startpos, endpos - startpos + 1)) * POWER(100, maxcnt - n)
                         val
              FROM   (SELECT   str,
                               cnt,
                               MAX(cnt) OVER () maxcnt,
                               n,
                               DECODE(n, 1, 1, INSTR(str, '.', 1, n - 1) + 1) startpos,
                               DECODE(n, cnt, LENGTH(str), INSTR(str, '.', 1, n) - 1) endpos
                        FROM   (SELECT   str, LENGTH(str) - LENGTH(REPLACE(str, '.', NULL)) + 1 cnt
                                  FROM   yourtable) t,
                               (    SELECT   LEVEL n
                                      FROM   DUAL
                                CONNECT BY   LEVEL < 10)
                       WHERE   n <= cnt))
GROUP BY   str
ORDER BY   SUM(val)

Open in new window

0
 
LVL 74

Expert Comment

by:sdstuber
ID: 24394407
need anything else?
0
 

Author Comment

by:koushikonjob
ID: 24395806
Sorry for late reply... ya its working fine.....

Thanks!!
Koushik
0
 
LVL 74

Accepted Solution

by:
sdstuber earned 500 total points
ID: 24395851
glad I could help

I see this is your first question.  Welcome to  EE.

If you need nothing else on this topic then please close the question.
Accept the post with the answer and give a grade.
0

Featured Post

Veeam Task Manager for Hyper-V

Task Manager for Hyper-V provides critical information that allows you to monitor Hyper-V performance by displaying real-time views of CPU and memory at the individual VM-level, so you can quickly identify which VMs are using host resources.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

PL/SQL can be a very powerful tool for working directly with database tables. Being able to loop will allow you to perform more complex operations, but can be a little tricky to write correctly. This article will provide examples of basic loops alon…
Shell script to create broker configuration file using current broker Configuration, solely for purpose of backup on Linux. Script may need to be modified depending on OS-installation. Please deploy and verify the script in a test environment.
This video shows how to copy a database user from one database to another user DBMS_METADATA.  It also shows how to copy a user's permissions and discusses password hash differences between Oracle 10g and 11g.
This video shows how to configure and send email from and Oracle database using both UTL_SMTP and UTL_MAIL, as well as comparing UTL_SMTP to a manual SMTP conversation with a mail server.
Suggested Courses

764 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question