sql >> Database >  >> RDS >> Oracle

Oracle SQL:rij sorteren met gescheiden tekenreeks

U kunt REGEXP_SUBSTR gebruiken om de individuele nummers uit elke rij te halen en vervolgens LISTAGG gebruiken om ze opnieuw samen te voegen in de gewenste volgorde -- zoiets als hieronder:

WITH 
  T (N) AS --TEST DATA
    (SELECT '31132,11100,44232' FROM DUAL
    UNION
    SELECT '25464,89453,15686' FROM DUAL
    UNION
    SELECT '21561,68547,51612' FROM DUAL),
  T1 (N1) AS --USE THIS BELOW TO SEPARATE OUT FIRST/SECOND/THIRD VALUE FROM EACH ROW
    (SELECT 1 FROM DUAL UNION SELECT 2 FROM DUAL UNION SELECT 3 FROM DUAL),
  SEPARATED (RN,N) AS 
    (SELECT RN,REGEXP_SUBSTR(N,'[^,]+',1,T1.N1) N FROM --GET THE VALUES FROM EACH ROW WITH AN ACCOMPANYING ROW NUMBER SO WE CAN REGROUP THEM BELOW
      (SELECT ROW_NUMBER() OVER(ORDER BY 1) RN ,N FROM T),T1)
SELECT LISTAGG(N,',') WITHIN GROUP (ORDER BY N) FROM SEPARATED GROUP BY RN; --USE LISTAGG TO REJOIN THE SEPARATED VALUES IN THE DESIRED ORDER



  1. Overlappende segmenten samenvoegen om de effectieve lengte te meten

  2. Toestemming verlenen voor uitvoeren van een gebruiker op alle opgeslagen procedures in de database?

  3. Automatisch incrementeel datumveld en versie Oracle SQL voor een tabel

  4. Gesplitste functie-equivalent in T-SQL?