2012-03-02 3 views
1
Name   Nameid 
P,q,r,s,t  One 
A,b,c   Two 
D,e    Three 

이 내 소스 테이블이지만, 나는이열을 분할하는 방법?

Name Nameid 
P  One 
Q  One 
R  One 
S  One 
T  One 
A  Two 
B  Two 
C  Two 
D  three 
+2

침을 열? 때때로 나는 칼럼을 침을 뱉을 수 있었으면 좋겠다. – Taryn

+0

중복 가능한 [여러 열을 분할] (http://stackoverflow.com/questions/3713107/split-column-to-multiple-rows) – APC

답변

-3

죄송처럼 내 목표 테이블이 내가 게시 된 질문을 이해하지 못합니다. 그 이후로 다시 포맷되었습니다.

오라클에는 여기에 필요한 분할 기능이 내장되어 있지 않습니다. 다음 링크는 사용자 정의 분할 함수를 만드는 방법을 보여줍니다 : 당신은 유형을 만든 후에

http://srinisreeramoju.blogspot.com/2010/03/oracle-custom-split-function.html

을하고, 기능은 단순히로 부를 것이다 : 이런 경우

SELECT 
    Split(Name, ',') AS Name, 
    NameID 
FROM 
    YourTable 
1

, 나는 다른 방식으로 데이터를 저장하는 것이 더 우아 할 것이라고 생각한다.

프로그램에서 행을 삽입하는 경우 문자열을 거기에 분할하고 대신 몇 줄을 더 삽입하십시오.

가상 코드 예를 들어 보겠습니다.

number = "One" 
many_letters = "P,Q,R,S,T".split(",") 
for(letter in many_letters) { 
    insert_values(letter, number) 
} 
+0

나는 이것이 그가 무엇을 요구했는지 확신하지 못합니다. 그러나 질문은 모호합니다. – vulkanino

+0

네 말이 맞아. 그래도 잠재적 인 해결책이라고 생각합니다. – professorsloth

1

여기 here에서 해제 한 방법 :

SQL> CREATE TABLE t (name VARCHAR2(20), nameid VARCHAR2(10)); 

Table created. 

SQL> INSERT INTO t VALUES ('P,q,r,s,t','One'); 

1 row created. 

SQL> INSERT INTO t VALUES ('A,b,c' ,'Two'); 

1 row created. 

SQL> INSERT INTO t VALUES ('D,e'  ,'Three'); 

1 row created. 

SQL> SELECT  nameid 
    2 ,   REGEXP_SUBSTR (name, '[^,]+', 1, LEVEL) AS token 
    3 FROM  t 
    4 CONNECT BY PRIOR nameid = nameid 
    5 AND  REGEXP_INSTR (name, '[^,]+', 1, LEVEL) > 0 
    6 AND  PRIOR DBMS_RANDOM.STRING ('p', 10) IS NOT NULL 
    7 ; 

NAMEID  TOKEN 
---------- -------------------- 
One  P 
One  q 
One  r 
One  s 
One  t 
Three  D 
Three  e 
Two  A 
Two  b 
Two  c 

10 rows selected. 

SQL> 
관련 문제