Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle SQL :sortuj wiersz z rozdzielanym ciągiem

Możesz użyć REGEXP_SUBSTR, aby wyciągnąć poszczególne liczby z każdego wiersza, a następnie użyć LITAGG, aby połączyć je ponownie w żądanej kolejności – mniej więcej tak:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. lewe złącze zewnętrzne, w którym tabele pochodzą z dwóch różnych systemów baz danych

  2. Dlaczego Oracle SQL w tajemniczy sposób rozwiązuje niejednoznaczność w jednym sprzężeniu, a nie w innych?

  3. Znajdowanie różnicy między dwoma wierszami w tabeli. Wyrocznia

  4. Widząc ORA-01858:znaleziono znak nienumeryczny w miejscu, w którym oczekiwano liczby

  5. Co to jest typ danych Oracle MLSLABEL?