id
|
name
|
courses
|
1
|
小明
|
44,55,66
|
2
|
小红
|
11
|
3
|
小紫
|
22,44
|
course表
id
|
name
|
11
|
数学
|
22
|
语文
|
66
|
英语
|
44
|
体育
|
55
|
美术
|
查询sql
select a.*,to_char(wm_concat(b.name)) from student a,course b where instr(b.id, a.courses ) > 0
student表的courses字段,存着course的id,现在需要学生的所有课程用字符串的形式查出student表idnamecourses1小明 44,55,662小红113小紫22,44course表idname11数学22语文66英语44体育55美术查询sqlselect a.*,to_char(wm_concat(b.name)) from student a,course b ...
SELECT DISTINCT T.NAME,
REPLACE(REGEXP_SUBSTR(T.TESTSTR, '[^,]+', 1, LEVEL), ',', ' ') TESTSTR
FROM TEST2 T
WHERE 1 = 1
CONNECT BY LEVEL <= (LENGTH(T.TESTSTR) - LENGTH(REPLACE(T.TESTSTR, ',', '')) + 1);
-- Create table TEST2
create
参数3:起始位置,从第几个字符开始正则表达式匹配(默认为1)
参数4:标识第几个匹配组,默认为1
参数5:模式('i'不区分大小写进行检索;'c'区分大小写进行检索。默认为'c'。)
SELECT REGEXP_SUBSTR('34,56,-23', '[^,]+', 1, LEVEL
在
Oracle
中,我们可以使用SUBSTR和INSTR函数来分割一个视图的
字符串
,使其分散在多行中显示。
首先,我们可以使用SUBSTR函数来截取
字符串
中的部分字符。该函数的格式为:SUBSTR(
字符串
, 起始位置, 长度)。起始位置是从1开始计算的。
接下来,我们可以使用INSTR函数来定位一个字符在
字符串
中的位置。该函数的格式为:INSTR(
字符串
, 被定位的字符, 起始位置)。起始位置同样是从1开始计算的。
考虑以下的例子:
假设我们有一个视图名为"employees_view",其中的字段"employee_name"包含了多个员工名字,这些名字被
逗号
分隔
开。
我们可以使用以下语句来创建一个新的视图,将"employee_name"字段分割成多行:
CREATE VIEW employees_view_multiline AS
SELECT SUBSTR(employee_name, 1, INSTR(employee_name, ',')-1) AS name
FROM employees_view
UNION ALL
SELECT SUBSTR(employee_name, INSTR(employee_name, ',')+1) AS name
FROM employees_view
WHERE INSTR(employee_name, ',', 1, 1) > 0;
在这个例子中,我们首先从"employee_name"字段中找到第一个
逗号
的位置,然后使用SUBSTR函数将其之前的字符截取成为一行。然后,我们再次使用INSTR函数找到第二个
逗号
的位置,将其之后的字符截取成为另一行。我们使用UNION ALL将这两个查询结果合并成为一个视图。
通过这种方式,我们可以实现将一个字段的
字符串
分割成多行显示的效果。
Unable to get VFS File object for filename 'file:///': Unknown scheme "sftp" in URI "{1}".
Unable to get VFS File object for filename 'file:///': Unknown scheme "sftp" in URI "{1}".
Dr_Mnka: