Oracle
 sql >> база данни >  >> RDS >> Oracle

SQL - Разделете една колона на няколко колони

Зависи от съгласуваността на данните - ако приемем, че един интервал е разделителят между това, което искате да се показва в колона едно срещу две:

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;

Можете също да използвате заявката по-долу с 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+ има поддръжка на регулярни изрази, което позволява повече гъвкавост в зависимост от ситуацията, която трябва да разрешите. Той също така има метод за подниз регулярни изрази...

РЕДАКТИРАНЕ: РАЗДЕЛЯНЕ НА 3 ДУМИ:

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;

Справка:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Заявка за актуализиране - Oracle

  2. ORA-04091:таблица xx_xx се променя, тригерът/функцията може да не я види

  3. Извличане на данни от дефиниран от потребителя тип чрез cx_Oracle

  4. Използване на Oracle® Heterogeneous Services с два ODBC източника на данни

  5. грешка:ORA-65096:невалидно име на общ потребител или роля в oracle