Write a query to Sort the numbers in comma seperated

Input: 4,10,6,1,8,46,52,12,18

Output: 1,4,6,8,10,12,18,46,52

This example shows how to split a comma-separated string, sort the values, and join them back using Oracle SQL.

STEP 1

SELECT '4,10,6,1,8,46,52,12,18' c FROM dual;

STEP 2

WITH d AS (
  SELECT '4,10,6,1,8,46,52,12,18' c
  FROM dual
)
SELECT c
FROM d
CONNECT BY LEVEL <= REGEXP_COUNT(c, ',') + 1;

Output:

4,10,6,1,8,46,52,12,18
4,10,6,1,8,46,52,12,18
4,10,6,1,8,46,52,12,18
4,10,6,1,8,46,52,12,18
4,10,6,1,8,46,52,12,18
4,10,6,1,8,46,52,12,18
4,10,6,1,8,46,52,12,18
4,10,6,1,8,46,52,12,18
4,10,6,1,8,46,52,12,18

STEP 3

WITH d AS (
  SELECT '4,10,6,1,8,46,52,12,18' c
  FROM dual
)
SELECT c, REGEXP_SUBSTR(c, '[^,]+', 1, LEVEL) e
FROM d
CONNECT BY LEVEL <= REGEXP_COUNT(c, ',') + 1;

Output:

4,10,6,1,8,46,52,12,18    4
4,10,6,1,8,46,52,12,18    10
4,10,6,1,8,46,52,12,18    6
4,10,6,1,8,46,52,12,18    1
4,10,6,1,8,46,52,12,18    8
4,10,6,1,8,46,52,12,18    46
4,10,6,1,8,46,52,12,18    52
4,10,6,1,8,46,52,12,18    12
4,10,6,1,8,46,52,12,18    18

STEP 4

WITH d AS (
  SELECT '4,10,6,1,8,46,52,12,18' c
  FROM dual
)
SELECT LISTAGG(e, ',') WITHIN GROUP (ORDER BY e) col
FROM (
  SELECT c, REGEXP_SUBSTR(c, '[^,]+', 1, LEVEL) e
  FROM d
  CONNECT BY LEVEL <= REGEXP_COUNT(c, ',') + 1
);

Output:

1,10,12,18,4,46,52,6,8

STEP 5

WITH d AS (
  SELECT '4,10,6,1,8,46,52,12,18' c
  FROM dual
)
SELECT LISTAGG(e, ',') WITHIN GROUP (ORDER BY TO_NUMBER(e)) col
FROM (
  SELECT c, REGEXP_SUBSTR(c, '[^,]+', 1, LEVEL) e
  FROM d
  CONNECT BY LEVEL <= REGEXP_COUNT(c, ',') + 1
);

Output:

1,4,6,8,10,12,18,46,52
```

No comments:

Post a Comment