簡體   English   中英

SQL - 將單列分成多列

[英]SQL - Divide single column in multiple columns

我有以下 SQL 問題:

如何使用 SELECT 命令將一列(里面的文本)分成兩個帶有拆分文本的單獨列?

我需要使用空格字符分隔文本數據。 我知道最好舉個例子來簡化。 所以:

SELECT COLUMN_A FROM TABLE1

輸出:

COLUMN_A
-----------
LORE IPSUM

所需的輸出:

COLUMN_A   COLUMN_B
---------  ----------
LORE       IPSUM

謝謝大家的幫助。

取決於數據的一致性 - 假設單個空格是您希望在第一列和第二列中顯示的內容之間的分隔符:

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;

參考:

可以使用計數器和PIVOT運算符來擴展解,使用計數器獲取單詞編號,使用PIVOT將行更改為列

WITH Counter (N) AS (
  SELECT LEVEL FROM DUAL
  CONNECT BY LEVEL <= (SELECT MAX(regexp_count( COLUMN_A, ' ')) + 1
                       FROM   Table1)
)
SELECT Word_1, Word_2, Word_3, Word_4
FROM   (SELECT t.COLUMN_A
             , c.N N
             , REGEXP_SUBSTR(t.COLUMN_A, '[^ ]+', 1, c.N) Word
        FROM   Table1 t
               LEFT JOIN Counter c ON c.N <= regexp_count( COLUMN_A, ' ') + 1) b
       PIVOT
       (MAX(Word) FOR N IN (1 Word_1, 2 Word_2, 3 Word_3, 4 Word_4)) pvt

SQLFiddle演示

但是在PIVOT定義中有一個固定列列表,真正有一個通用查詢動態數據透視表或需要PIVOT XML

INSERT INTO Rough (Tag_Id,Status_ , new_)                      
        WITH TEST_DATA AS              
             (SELECT regexp_replace('&data' ,'\s+',' ') COLUMN_A FROM DUAL)
                 SELECT REGEXP_SUBSTR (REGEXP_SUBSTR (t.COLUMN_A, '[^-]+', 1, LEVEL), '[^ ]+', 1, 1) AS Col1,
                       REGEXP_SUBSTR (REGEXP_SUBSTR (t.COLUMN_A, '[^-]+', 1, LEVEL), '[^ ]+', 1, 2) AS Col2,
                            REGEXP_SUBSTR (REGEXP_SUBSTR (t.COLUMN_A, '[^-]+', 1, LEVEL), '[^ ]+', 1, 3) AS Col3
                                FROM test_data T    
                                     CONNECT BY LEVEL <= LENGTH (REGEXP_REPLACE (t.COLUMN_A, '[^-]+')) + 1;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM