標籤:
Oracle將一列分成多列
在Oracle中,我們可以使用listagg(Oracle 11g及以上)將多行合并成中的某一列合并成一列,現在我們的需求是將一列分割成多列。
先建立一張表,插入測試資料:
CREATE TABLE CELEBRITY( NAME VARCHAR2(100) );INSERT INTO CELEBRITY VALUES (‘Stephen King‘);INSERT INTO CELEBRITY VALUES (‘Tom Hanks‘);INSERT INTO CELEBRITY VALUES (‘Christopher Nolan‘);
查詢該表其結構如下:
NAME |
Stephen King |
Tom Hanks |
Christopher Nolan |
現在將表分割成兩列:
SELECT REGEXP_SUBSTR(name,‘^[^ ]*‘) first_name, REGEXP_SUBSTR(name, ‘([[:alpha:]]+)$‘) middle_nameFROM CELEBRITY
其中我們使用到了REGEXP_SUBSTR函數,其使用正則進行匹配,將一列分成兩列,其結果如下:
FIRST_NAME |
MIDDLE_NAME |
Stephen |
King |
Tom |
Hanks |
Christopher |
Nolan |
當然,我們可以使用INSTR函數來進行分割:
SELECT SUBSTR(NAME, 1, INSTR(NAME, ‘ ‘)-1) FIRST_NAME, SUBSTR(NAME, INSTR(NAME, ‘ ‘)+1) MIDDLE_NAMEFROM CELEBRITY
或者我們這樣:
SELECT SUBSTR(NAME, 1, SPACE_POS-1) FIRST_NAME, SUBSTR(NAME, SPACE_POS+1) MIDDLE_NAMEFROM (SELECT NAME,INSTR(NAME, ‘ ‘) SPACE_POSFROM CELEBRITY)
以上方法均可以將一列分成兩列。
Oracle將一列分成多列