Solved

Sorting of number in PTO order

Posted on 2009-05-13
4
380 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
  • 3
4 Comments
 
LVL 73

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 73

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 73

Accepted Solution

by:
sdstuber earned 125 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

What Is Threat Intelligence?

Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

Join & Write a Comment

Have you ever had to make fundamental changes to a table in Oracle, but haven't been able to get any downtime?  I'm talking things like: * Dropping columns * Shrinking allocated space * Removing chained blocks and restoring the PCTFREE * Re-or…
Background In several of the companies I have worked for, I noticed that corporate reporting is off loaded from the production database and done mainly on a clone database which needs to be kept up to date daily by various means, be it a logical…
This video shows how to Export data from an Oracle database using the Datapump Export Utility.  The corresponding Datapump Import utility is also discussed and demonstrated.
This video shows how to Export data from an Oracle database using the Original Export Utility.  The corresponding Import utility, which works the same way is referenced, but not demonstrated.

759 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

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now