Oracle
 sql >> Datenbank >  >> RDS >> Oracle

SQL - Teilen Sie eine einzelne Spalte in mehrere Spalten auf

Hängt von der Konsistenz der Daten ab - vorausgesetzt, ein einzelnes Leerzeichen ist das Trennzeichen zwischen dem, was in Spalte eins und zwei erscheinen soll:

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;

Sie können auch die folgende Abfrage mit REGEX verwenden:

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+ hat Regex-Unterstützung, was mehr Flexibilität ermöglicht, je nach der Situation, die Sie lösen müssen. Es hat auch eine Regex-Substring-Methode ...

BEARBEITEN: 3 WÖRTER SPLIT:

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;

Referenz: