Reputation: 55
I have data in database as [AD AC AB AA H7 H2 H4 H3 H8 H6 H5 H9 H1 HL HJ HH HG HF 1S 1B 1G 1A]
I need to display it as [AD AC AB AA HL HJ HH HG HF H9 H8 H6 H7 H5 H4 H3 H2 H1 1S 1G 1B 1A]
. Can you please help me.
Till now i have tried this
select distinct Col1
from Table1
order by regexp_substr(Col1 , '^[[:alpha:]]') ,
regexp_substr(Col1 , '[[:alpha:]]', 1,2) desc,
regexp_substr(Col1 , '^\d*'),
regexp_substr(regexp_substr(Col1 , '_[[:alpha:]]*') ,'[[:alpha:]]+') desc;
Thanks in advance
Upvotes: 0
Views: 60
Reputation: 1158
Try this
select distinct col1
from table_name
order by
regexp_substr(Col1 , '^[[:alpha:]]') ,
SUBSTR(Col1, 2, 1) desc
Upvotes: 1
Reputation: 450
You need to provide more info or describe your requirement more for additional cases.
However from the data you have posted already, here is a query that can do it.
WITH mydat
AS (SELECT 'AD' AS Col1 FROM DUAL
UNION
SELECT 'AC' AS Col1 FROM DUAL
UNION
SELECT 'AB' AS Col1 FROM DUAL
UNION
SELECT 'AA' AS Col1 FROM DUAL
UNION
SELECT 'H7' AS Col1 FROM DUAL
UNION
SELECT 'H2' AS Col1 FROM DUAL
UNION
SELECT 'H4' AS Col1 FROM DUAL
UNION
SELECT 'H3' AS Col1 FROM DUAL
UNION
SELECT 'H8' AS Col1 FROM DUAL
UNION
SELECT 'H6' AS Col1 FROM DUAL
UNION
SELECT 'H5' AS Col1 FROM DUAL
UNION
SELECT 'H9' AS Col1 FROM DUAL
UNION
SELECT 'H1' AS Col1 FROM DUAL
UNION
SELECT 'HL' AS Col1 FROM DUAL
UNION
SELECT 'HJ' AS Col1 FROM DUAL
UNION
SELECT 'HH' AS Col1 FROM DUAL
UNION
SELECT 'HG' AS Col1 FROM DUAL
UNION
SELECT 'HF' AS Col1 FROM DUAL
UNION
SELECT '1S' AS Col1 FROM DUAL
UNION
SELECT '1B' AS Col1 FROM DUAL
UNION
SELECT '1G' AS Col1 FROM DUAL
UNION
SELECT '1A' AS Col1 FROM DUAL)
SELECT Col1,
REGEXP_SUBSTR (Col1, '^[[:alpha:]]') first_char_else_null,
REGEXP_SUBSTR (Col1, '^[[:digit:]]') first_num_else_null,
SUBSTR (Col1, 2, 1) second_char,
ASCII (SUBSTR (Col1, 2, 1)) ascii_second_char
FROM mydat
ORDER BY REGEXP_SUBSTR (Col1, '^[[:alpha:]]') NULLS LAST,
REGEXP_SUBSTR (Col1, '^[[:digit:]]') NULLS FIRST,
ASCII (SUBSTR (Col1, 2, 1)) DESC;
Upvotes: 0