[英]Divide data in a single column with symbol of '|' to multiple columns in Oracle 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
但是在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.