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
答案 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