表1:
id 姓名 成绩
1 张三 90
2 李四 80
.
.
.
表2:(其中姓名是2个数据拼接而成的,中间用逗号分隔)
id 姓名 年龄
1 张三,男 20
2 李四,女 30
.
.
.如何做一个视图,把每个人的年龄和成绩显示出来。
id 姓名 成绩
1 张三 90
2 李四 80
.
.
.
表2:(其中姓名是2个数据拼接而成的,中间用逗号分隔)
id 姓名 年龄
1 张三,男 20
2 李四,女 30
.
.
.如何做一个视图,把每个人的年龄和成绩显示出来。
调试欢乐多
create or replace FUNCTION splitstr
(
p_string IN VARCHAR2,
p_delimiter IN VARCHAR2,
p_num IN NUMBER)
RETURN VARCHAR2
AS
v_length NUMBER := LENGTH(p_string);
v_start NUMBER := 1;
v_index NUMBER;
v_p NUMBER := 1;
v_r VARCHAR2(100);
BEGIN
WHILE(v_start <= v_length)
LOOP
v_index := INSTR(p_string, p_delimiter, v_start);
IF v_index = 0 THEN
v_r := (SUBSTR(p_string, v_start));
v_start := v_length + 1;
ELSE
v_r := (SUBSTR(p_string, v_start, v_index - v_start));
v_start := v_index + 1;
END IF;
v_p := v_p + 1;
IF v_p = p_num+1 THEN
RETURN v_r;
END IF;
END LOOP;
RETURN '';
END splitstr;
表1.姓名,
表1.成绩,
表2.年龄
FROM
表1
INNER JOIN 表2 ON 表1.id=表2.id
自己看吧,修改一下应该就能用的
select a.姓名,b.年龄,a.成绩
from 表1 a
inner join (
select left(姓名,CHARINDEX(',',姓名)-1) as 姓名,年龄
from 表2
) b on a.姓名=b.姓名姓名 年龄 成绩
---- ----------- -----------
李四 30 80
张三 20 90(2 行受影响)
INNER JOIN 表2 ON 表1.姓名=表2.substring(姓名,0,len(姓名)-1)