`

Oracle拆分split字符串,instr函数的使用

阅读更多

需求:

学生表中的课程字段是存课程表的id:1,2,3

学生表: student

………………
id    name     Course
1     张三      1,2,3

………………

课程表: course

………………
     id    name
     1       语文
     2       数字
     3       英语
………………

查询学生表时,需要将对应的课程名称关联查出,如:

………………

张三    语文,数字,英语

………………

 

实现方案-1:

先将学生表课程的值按逗号拆分;再利用oracle合并列的函数wm_concat合并。

 

利用正则表达式实现拆分的示例:

--利用正则表达式实现拆分的示例
SELECT REGEXP_SUBSTR ('abc1,cbd2,db3,db5', '[^,]+', 1,rownum) FROM DUAL
CONNECT BY ROWNUM <= LENGTH ('abc1,cbd2,db3,db5') - LENGTH (REPLACE ('abc1,cbd2,db3,db5', ',', ''))+1;

 实现:

select s.name
	,(
		select wm_concat(c.name) 
		  from course c
		 where c.id in 
			(
			 SELECT REGEXP_SUBSTR (s.course, '[^,]+', 1,rownum) as id FROM DUAL
			 CONNECT BY ROWNUM <= LENGTH (s.course) - LENGTH (REPLACE (s.course, ',', ''))+1
			)
	) as course
from student s
where s.name = '张三';

 

实现方案-2:

利用instr函数;再利用oracle合并列的函数wm_concat合并。

select s.name
	,(
		select wm_concat(c.name) 
		  from course c 
		 where instr(s.course, c.id) > 0
	) as course
FROM student s where name ='张三';

 ***此方法的弊端:当course.id存在数值较小的情况时就会有误.

    eg: student.course='12345,67890'  course.id=1

        这时就会错误的把course.id=1的记录查出来。

 

 

instr函数,判断源字符串'是否包含 '目标字符串':

instr(sourceString,destString,start,appearPosition)

instr('源字符串' , '目标字符串' ,'开始位置','第几次出现')

 

start代表查找的开始位置,这个参数可选的,默认为1,如果start的值为负数,则代表从右往左进行查找,但是位置数据仍然从左向右计算;

appearPosition代表想从源字符中查找出第几次出现的destString,这个参数也是可选的, 默认为1

返回值为:查找到的字符串的位置。

--instr函数可以代替like使用,在大数据量的搜索时,instr效率明显高于like
instr('oracle’,'ac’)>0 相当于 like '%ac%'
instr('oracle’,'ac’)=0 相当于 not like '%ac%'

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Oracle拆分字符串,字符串分割的函数

    虽然这不是直接的字符串分割函数,但可以配合其他函数一起使用,实现字符串的拆分。 2. **SUBSTR() 函数** `substr()` 用于从字符串中提取指定长度的部分。例如,`substr(string, start_position, length)` 返回从...

    Oracle中实现Split函数功能

    这个函数使用了 Oracle 的管道化函数(pipelined function)来返回拆分后的结果。函数内部使用了一个循环来拆分字符串,每次循环都会将拆分后的结果返回给调用者。 最后,我们可以使用这个函数来拆分字符串。例如,...

    oracle_split_函数_返回数组

    这个函数使用一个循环结构,通过`INSTR`找到分隔符的位置,然后切割字符串并将每个部分添加到`T_VARRAY`类型的变量`CSTR`中。 ```sql CREATE OR REPLACE TYPE LW.T_VARRAY IS TABLE OF VARCHAR2(200); CREATE OR ...

    oracle split函数

    在Oracle数据库中,并没有内置的split函数来处理字符串的分割操作。然而,在实际应用中,经常需要将一个包含多个值的字符串按照指定的分隔符进行拆分,转换为表格式的数据,以便进行进一步的处理或查询。为此,可以...

    oracle分隔字符串函数

    ### Oracle 分隔字符串函数知识点详解 #### 一、Oracle 分隔字符串函数介绍 在 Oracle 数据库中处理字符串是一项常见的需求,特别是在数据清洗、格式转换等场景下。Oracle 提供了一系列强大的字符串处理函数来帮助...

    plsql分割字符串

    自定义函数`FUNCTION_SF_SPLIT_STRING`如上所示,是一个典型的用于分割字符串的函数,它接受两个参数:待分割的字符串`STRING`和用作分隔符的子字符串`SUBSTRING`,返回一个`VARCHAR2`类型的数组,其中包含了分割后...

    Oracle,Split

    而在Oracle数据库中,并没有内置的直接等效于.NET中`Split`的方法,因此我们需要使用SQL语句结合一些字符串处理函数来实现类似的功能。下面将具体介绍如何在Oracle中实现字符串分割。 #### 二、实现原理 为了实现...

    plsql中的字符串分割.txt

    3. **使用`INSTR`函数**:通过`INSTR`函数来定位分隔符(逗号)的位置,进而提取每个子字符串。 4. **结果输出**:最终输出被分割后的所有子字符串。 ### PL/SQL字符串分割实现方法详解 为了实现字符串分割的功能...

    Oracle 自定义split 函数实例详解

    通过这个自定义的`fn_var_split`函数,我们可以在Oracle数据库中方便地处理字符串,将一个大字符串按照指定的分隔符拆分成多个子字符串,适用于需要对字符串进行分组或处理的场景。这种自定义函数的方法不仅可以提高...

    添加split和splitstr函数-oracle培训.docx

    而`split`函数虽然在提供的内容中没有具体的实现,但通常它会与`splitstr`类似,用于将字符串按照某种规则拆分成数组或集合类型,以便于进一步的处理。 在处理大数据量时,这样的自定义函数尤其有用,因为它们避免...

    一个字符串分隔多个参数存储过程调试

    这就需要用到字符串处理函数,如SQL Server中的`STRING_SPLIT`,MySQL中的`SUBSTRING_INDEX`或`FIND_IN_SET`,或者Oracle中的`INSTR`和`SUBSTR`等。 在存储过程的调试方面,不同数据库系统提供了不同的工具和方法。...

    oracle数据库自定义split函数和调用具体实现

    首先,我们可以使用Oracle的内置函数`REGEXP_SUBSTR`来实现字符串的拆分。`REGEXP_SUBSTR`用于从字符串中提取符合正则表达式模式的部分。在这个例子中,正则表达式`[^/]+`表示匹配除斜杠之外的任何字符的一个或多个...

    oracle函数大全

    - `SPLIT_STRING(input_string, delimiter, index)`: 按照分隔符将字符串拆分为多个部分,返回指定索引的子字符串。 9. **位操作函数** - `BITAND(a, b)`: 对a和b执行按位与操作。 - `BITOR(a, b)`: 对a和b执行...

    sql带分隔符的截取字符串示例

    分隔符通常用于将单一字符串拆分为多个部分,例如在CSV(逗号分隔值)格式的数据中。以下是一个详细的SQL字符串截取教程,特别关注如何在遇到分隔符时进行操作。 首先,我们声明一个变量`@str`并赋值为包含分隔符...

    详解oracle管道函数的用法(一行拆为多行)

    在函数内部,使用`INSTR`函数找到分隔符的位置,并使用`SUBSTR`函数提取子字符串。`PIPE ROW`语句将提取的子字符串作为一行添加到结果集中。当没有更多的分隔符时,循环结束,函数返回。 **4. 使用管道函数** 在...

    PL_SQL文件

    - **函数逻辑**:通过循环遍历字符串,查找分隔符的位置,然后使用 `SUBSTR` 函数来截取子字符串,并使用管道操作符 `PIPE ROW` 将其添加到结果集中。 - **示例代码**: ```sql CREATE OR REPLACE TYPE TYPE_...

    石家庄天远科技集团有限公司—Java开发笔试题

    Oracle中的字符串操作函数包括`CONCAT()`连接字符串,`ASCII()`返回对应整数的字符,`INSTR()`查找字符位置,`SUBSTR()`截取子字符串,`SYSDATE`获取当前日期,`TO_DATE()`将字符串转换为日期。 【团队意识】 团队...

    2024 ETL开发公司面试题

    利用SQL中的字符串函数如`SUBSTR()`和`INSTR()`来实现地址字段的拆分,并使用`UNION ALL`将结果合并。 **步骤详解:** 1. **定义表结构:** ```sql CREATE TABLE AddressTable (name VARCHAR2(10), address ...

    Oracle逗号分隔列转行实现方法

    在许多系统设计中,为了节省空间或者简化存储,会将多个关联的信息用逗号或其他分隔符连接成一个字符串存储在一个字段内。例如,用户权限管理中,可能将用户所属的多个权限编号以逗号分隔的方式存放在一个权限组字段...

Global site tag (gtag.js) - Google Analytics