`
frank1998819
  • 浏览: 763521 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类

为Orcle 创建 对标Mysql FIND_IN_SET功能的函数

 
阅读更多

-- 字段存储 以某个字符(如:英文逗号)隔开的值,如何符合条件的记录呢?

Oracle 中 新增 表table_t中id字段存储

-------------

  id

------------

  1,2,8

  1,8

  1,3,4,8

--------------

如何查询出来id为1,8的记录呢?

 

 

 

CREATE OR REPLACE FUNCTION FUNC_FIND_IN_SET(piv_str1 varchar2, piv_str2 varchar2, p_sep varchar2 := ',')

 

RETURN NUMBER IS      

 

  l_idx    number:=0; -- 用于计算piv_str2中分隔符的位置  

 

  str      varchar2(500);  -- 根据分隔符截取的子字符串  

 

  piv_str  varchar2(500) := piv_str2; -- 将piv_str2赋值给piv_str  

 

  res      number:=0; -- 返回结果  

 

  loopIndex number:=0;

 

BEGIN  

 

-- 如果piv_str中没有分割符,直接判断piv_str1和piv_str是否相等,相等 res=1  

 

IF instr(piv_str, p_sep, 1) = 0 THEN  

 

   IF piv_str = piv_str1 THEN   

 

      res:= 1;  

 

   END IF;  

 

ELSE  

 

-- 循环按分隔符截取piv_str  

 

LOOP  

 

    l_idx := instr(piv_str,p_sep);  

 

     loopIndex:=loopIndex+1;

 

-- 当piv_str中还有分隔符时  

 

      IF l_idx > 0 THEN  

 

 

 

   -- 截取第一个分隔符前的字段str  

 

         str:= substr(piv_str,1,l_idx-1);  

 

   -- 判断 str 和piv_str1 是否相等,相等 res=1 并结束循环判断  

 

         IF str = piv_str1 THEN   

 

           res:= loopIndex;  

 

           EXIT;  

 

         END IF;  

 

        piv_str := substr(piv_str,l_idx+length(p_sep));  

 

      ELSE  

 

   -- 当截取后的piv_str 中不存在分割符时,判断piv_str和piv_str1是否相等,相等 res=1  

 

        IF piv_str = piv_str1 THEN   

 

           res:= loopIndex;  

 

        END IF;  

 

        -- 无论最后是否相等,都跳出循环  

 

        EXIT;  

 

      END IF;  

 

END LOOP;  

 

-- 结束循环  

 

END IF;  

 

-- 返回res  

 

RETURN res;

 

END FUNC_FIND_IN_SET;

 

-- 函数的第三个参数是目标字段的分隔符,默认是英文逗号。如果使用的是别的分隔符的话,在使用函数时,需要传入相应的分隔符哦!

-- 使用函数样例 

 

select t.* from TABLE_T t where FUNC_FIND_IN_SET('8', t.ids) > 0

 

select t.* from TABLE_T t where FUNC_FIND_IN_SET('1', t.ids) > 0 and FUNC_FIND_IN_SET('2', t.ids) > 0 

 

分享到:
评论

相关推荐

    oracle 创建wm_concat函数

    为了在这些版本中实现类似的功能,需要自行创建一个用户定义的聚合函数。下面将详细介绍如何创建这样一个函数。 #### 知识点二:定义类型(string_sum_obj) 首先,需要定义一个类型`string_sum_obj`,用于存储中间...

    mysql sqlserver orcle 数据库操作

    至于查看数据库的字符编码集,MySQL的命令是`SHOW VARIABLES LIKE '%char%'`,它会列出所有与字符集相关的系统变量,如`character_set_database`和`collation_database`。 在Oracle数据库中,设置主键的过程与MySQL...

    oracel函数的汇总

    自定义函数允许开发人员创建自己的函数,以满足特定业务需求。 掌握这些Oracle函数不仅能够提高SQL查询的效率,还能使你在解决复杂问题时更加得心应手。记住,不必完全记住每个函数的细节,关键是在需要时能想起并...

    oracle中的BLOB(照片)转换到mysql中

    在IT行业中,数据库管理系统(DBMS)如Oracle和MySQL在数据存储方面扮演着至关重要的角色。Oracle数据库系统支持多种复杂的数据类型,其中包括BLOB(Binary Large Object),用于存储非结构化的大数据,如图片、音频...

    orcle与mysql的sql语法区别.docx

    相比之下,Oracle没有内置的自动增长类型,需要创建序列(SEQUENCE)来实现类似功能,如`CREATE SEQUENCE 序列号名称 INCREMENT BY 1 START WITH 1 MAXVALUE 99999 CYCLE NOCACHE`,然后在INSERT语句中使用`序列号...

    Oracle字符相似度函数

    Oracle字符相似度函数是Oracle数据库系统提供的一种功能,用于评估两个字符串之间的相似性。这个功能在数据清洗、信息检索、文本分析等领域具有广泛的应用。在SQL查询中,我们可以直接使用这些函数来比较不同字符串...

    Orcle与MySQL的SQL语法区别.doc

    ### Oracle与MySQL的SQL语法区别 #### 一、概述 Oracle和MySQL作为两种常见的关系型数据库管理系统(RDBMS),在数据库领域占据着重要的地位。尽管它们都遵循SQL标准,但在实际应用中,两者之间存在诸多差异。这些...

    orcle dblink 的创建与删除的详解及实例

    orcle dblink 的创建与删除的详解及实例 易混淆术语介绍:Db_name,Db_domain,Global_name,Service_name 删除 Dblink 报错 ORA-02024: database link not found 的解决方法 .

    orcle11g_创建时间维度表.zip

    RBAC_DIM_DAY.sql为日维度含数据,RBAC_DIM_MONTH为月维度含数据,RBAC_DIM_QUARTER为季维度含数据,RBAC_DIM_YEAR为年维度含数据和脚本文件时间维度表数据填充脚本时长2074年55年的使用寿命.txt>>

    orcle索引_视图序列同义词实验

    在本例中,我们使用`lower()`函数对`job`列的值进行转换后再创建索引,这样可以方便地进行不区分大小写的查询。 **1.4 查询当前用户的索引信息** - **实验目标**:学习如何查看已创建的索引信息。 - **实验步骤**...

    orcle设计与开发

    在Oracle的设计与开发过程中,掌握其核心功能和常用函数、方法对于提高数据库管理效率至关重要。以下将详细介绍Oracle的一些关键知识点。 1. **SQL语言基础**:Oracle基于SQL,它是用于查询、插入、更新和删除数据...

    ORCLE基本操作代码

    根据提供的标题、描述以及部分内容,可以总结出一系列与Oracle数据库操作相关的知识点,特别是关于SQL*Plus中的函数创建及调用,以及过程的定义等。以下将详细解释这些内容。 ### ORACLE基本操作代码 #### SQL*...

    orcle笔记个人笔记

    - **功能**:创建一个名为`student`的新角色。 - **授权**:`GRANT SELECT ON class TO student;` - **功能**:向`student`角色授予对`class`表的SELECT权限。 **7. 查看用户下数据表:** - **当前用户**:`...

    Oracle P/L SQL实现FTP上传、下载功能

    ab_ForceBinary in Boolean Default True --强制为二进制 ); Procedure p_GetClob( ac_Connection in out Nocopy Connection, as_RemoteFilename in VarChar2, ac_LocalClob in out Nocopy...

    orcle发起get请求

    - **存储过程创建**:`CREATE OR REPLACE PROCEDURE`语句用于创建或替换名为`pro_test_ws`的存储过程。 - **参数定义**:该存储过程接受一个输入参数`name`和一个输出参数`resmark`。 - **变量声明**:定义了`...

    orcle基本培训ppt文件

    这份“Oracle基本培训ppt文件”是为初学者设计的,旨在介绍Oracle的基本查询和函数使用,帮助新用户快速掌握数据库操作。 一、Oracle数据库概述 Oracle数据库系统由Oracle公司开发,提供高效的数据存储和管理能力,...

    详尽的ORCLE 教程

    Oracle数据库是全球广泛使用的大型关系型数据库管理系统,以其强大的功能、高效的性能和高度的稳定性而闻名。本"详尽的ORACLE教程"旨在为初学者和有经验的开发者提供一个全面的学习平台,从基础概念到高级特性,...

    Oracle统一社会信用代码自定义效验函数

    实际的函数可能会更复杂,包括对各个部分的进一步效验。 标签"Oracle 自定义函数"强调了这个函数是在Oracle环境中实现的,这意味着它必须遵循Oracle的语法和规范,且可以被其他Oracle SQL查询或PL/SQL程序调用。 ...

    Orcle游标实例.txt

    游标提供了对查询结果集中数据的灵活控制,包括向前或向后移动、重复读取特定行以及更新或删除所选行。 #### 二、游标声明与使用 在Oracle PL/SQL中,游标的声明和使用遵循一定的语法结构: 1. **声明游标**: `...

Global site tag (gtag.js) - Google Analytics