Oracle
 sql >> Base de données >  >> RDS >> Oracle

SQL - Diviser une seule colonne en plusieurs colonnes

Dépend de la cohérence des données - en supposant qu'un seul espace est le séparateur entre ce que vous voulez voir apparaître dans la colonne 1 et dans la colonne 2 :

WITH TEST_DATA AS
  (SELECT 'LOREM IPSUM' COLUMN_A FROM DUAL)

SELECT SUBSTR(t.COLUMN_A, 1, INSTR(t.COLUMN_A, ' ')-1) AS COLUMN_A,
       SUBSTR(t.COLUMN_A, INSTR(t.COLUMN_A, ' ')+1) AS COLUMN_B
FROM test_data T;

Vous pouvez également utiliser la requête ci-dessous avec REGEX :

WITH TEST_DATA AS
   (SELECT 'LOREM IPSUM' COLUMN_A FROM DUAL)

SELECT REGEXP_SUBSTR(t.COLUMN_A, '[^ ]+', 1, 1) COLUMN_A,
       REGEXP_SUBSTR(t.COLUMN_A, '[^ ]+', 1, 2) COLUMN_B
FROM test_data T;

Oracle 10g+ prend en charge les regex, permettant plus de flexibilité en fonction de la situation que vous devez résoudre. Il a également une méthode de sous-chaîne regex...

MODIF : 3 MOTS SÉPARÉS :

WITH TEST_DATA AS
  (SELECT 'LOREM IPSUM DIMSUM' COLUMN_A FROM DUAL)

 SELECT REGEXP_SUBSTR(t.COLUMN_A, '[^ ]+', 1, 1) COLUMN_A,
     REGEXP_SUBSTR(t.COLUMN_A, '[^ ]+', 1, 2) COLUMN_B,
     REGEXP_SUBSTR(t.COLUMN_A, '[^ ]+', 2, 3) COLUMN_C
 FROM test_data T;

Référence :