如何拆分列?

时间:2012-03-02 12:39:03

标签: sql oracle oracle10g

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

3 个答案:

答案 0 :(得分:1)

在这种情况下,我认为以不同的方式存储数据会更优雅。

如果要从程序中插入行,请尝试将字符串拆分,然后再插入几行。

让我给你一个伪代码示例。

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

答案 1 :(得分: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>

答案 2 :(得分:-3)

抱歉,我不明白发布的问题。从那时起它就被重新格式化了。

Oracle没有内置的Split功能,这就是你需要的。以下链接显示了如何创建自定义拆分功能:

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

创建类型和函数后,您只需将其命名为:

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