SQL-将单列划分为多列

Lc0*_*0rE 2 sql oracle select split

我有以下SQL问题:

如何使用SELECT命令将一列(内部文本)分为两个单独的带有拆分文本的列?

我需要使用空格字符分隔文本数据。我知道最好举个例子来简化它。所以:

SELECT COLUMN_A FROM TABLE1
Run Code Online (Sandbox Code Playgroud)

输出:

COLUMN_A
-----------
LORE IPSUM
Run Code Online (Sandbox Code Playgroud)

所需的输出:

COLUMN_A   COLUMN_B
---------  ----------
LORE       IPSUM
Run Code Online (Sandbox Code Playgroud)

谢谢大家的帮助。

Nis*_*hia 6

取决于数据的一致性-假设要在第一列与第二列之间出现的分隔符是单个空格:

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;
Run Code Online (Sandbox Code Playgroud)

您还可以在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;
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)

参考: