文档章节

Oracle Multi_like函数

吐槽的达达仔
 吐槽的达达仔
发布于 2014/12/05 22:17
字数 423
阅读 10
收藏 0

在VFP里面,有个很恶心的函数叫做inlist()。

它可以作为

inlist('%A%','%B%','%C%')

 

一次过like好几个,或者like一个数组。

 

好吧,因为业务需求,我们的SQL也有这样的需求。

为了满足这个要求,我自己写了一个Multi_like函数来实现。

 

通过输入两个字符串,进行多个对比。

想上函数代码。

create or replace function func_multi_like(p_src varchar2, p_str varchar2)
 return number
 is
 v_result number default 0;
 v_str varchar2(200);
 v_posistion number;
 v_sub_str varchar2(200);  --截取的STR
 v_tmp_str varchar2(200); --截取后剩下的str
 begin
 --全角半角转换
  v_str := REPLACE(p_str,',',',');
  v_str := trim(v_str);
  
  v_posistion:= instr(v_str,',');
  --判断有没有逗号?
  if v_posistion > 0 then

    --有逗号 截取str
    v_sub_str := trim(substr(v_str,0,v_posistion));
    --截取后剩下的str
    v_tmp_str := trim(substr(v_str,v_posistion+1 ,LENGTH(v_str)-v_posistion));

    --找不到逗号时,退出
    while v_posistion <> 0 loop
        --重置
        v_posistion := 0;
    
        --如果截取下来的不仅仅是逗号,则进截取数据判断。
        --如果有一个匹配成功,则result>0
        if LENGTH(v_sub_str)>1 and instr(p_src,trim(substr(v_sub_str,0,LENGTH(v_sub_str)-1)))> 0 
        then   
               v_result:= instr(p_src,trim(substr(v_sub_str,0,LENGTH(v_sub_str)-1)));
        end if;

        v_posistion:= instr(v_tmp_str,',');
        
        v_sub_str := trim(substr(v_tmp_str,0,v_posistion));
        v_tmp_str := trim(substr(v_tmp_str,v_posistion+1,LENGTH(v_tmp_str)-v_posistion));

        
    end loop;
       
      if instr(p_src,trim(v_tmp_str))> 0 
         then v_result:= instr(p_src,trim(v_tmp_str));
      end if;
        
  else
    --没有逗号,直接匹配
    v_result:= instr(p_src,v_str) ;
  end if;

  return v_result;  --返回0,则匹配失败,返回大于0则匹配成功。
 end;
 

输入两个参数,进行匹配。

 

举例,如要匹配google,baidu,sina,则可以如下使用

select * 
from media_table 
where  func_multi_like(media_name,'google,baidu,sina')>0
 

也就是说,如果media_name like google

或者 like baidu

或者 like sina

就会返回一个大于0的值。

 

注意,这里是like,不是=,如果是=用IN就好了。

 

 

 

 

本文转载自:http://dacoolbaby.iteye.com/blog/1687642

下一篇: Redis初探
吐槽的达达仔
粉丝 28
博文 105
码字总数 7399
作品 0
广州
程序员
私信 提问
oracle 全角半角转换函数

oracle提供两个全半角转换的两个函数 1、tosinglebyte(c)转换成半角 SQL> select tosinglebyte('1234523232') from dual; TOSINGLE ---------- 1234523232 2、tomultibyte(c)转换成全角......

Zero零_度
2016/11/02
35
0
oracle11g multi column statistics深入研究笔记

oracle研究中心:目前,CBO(Cost-Based Optimizer)是Oracle默认使用的查询优化器Query Optimizer模式。在CBO中,SQL执行计划的生成,是以一种寻找成本(Cost)最优为目标导向的执行计划探索...

lizhhui001
2017/06/07
0
0
Oracle中如何判断一个字符串是否含有汉字

看到网友问,怎么查询表中某个字段数据是不是包含了全角字符啊? 这个问题涉及到几个函数:tosinglebyte、length和lengthb,我之前做开发的时候研究的是如何判断一个字符串中是否包含中文,其...

技术小美
2017/11/12
0
0
Oracle10g中安装Perl环境所产生的冲突

  先是一个弹出框提示‘无法启动此程序,计算机丢失Perl58.dll’,点击确定后报出错误信息:Can't load 'D:oracleproduct10.2.0db1perl5.8.3lib/MSWin32-x86-multi-threa d/auto/File/Glob......

弱弱小男子
2013/09/10
51
0
利用DBMS_FILE_TRANSFER迁移数据库从AIX至Linux

环境描述 1、初始化阶段 1.1、源端数据库 源端数据库testdb,数据库版本11.2.0.3.0,运行在AIX 64-bit db1:/oracle/db/bin$echo $ORACLE_SID testdb1 db1:/oracle/db/bin$echo $ORACLE_HOME /...

lizhhui001
2017/11/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java发送html模板的高逼格邮件

最近做了一个监测k8s服务pod水平伸缩发送邮件的功能(当pod的cpu/内存达到指定阈值后会水平扩展出多个pod、或者指定时间内pod数应扩展到指定数量),一开始写了个格式很low的邮件,像下面这样...

码农实战
20分钟前
6
0
php-fpm配置文件详解/MariaDB密码重置、慢查询日志

来源:https://blog.csdn.net/Powerful_Fy php-fpm主配置文件路径:/usr/local/php-fpm/etc/php-fpm.conf #位于安装php安装目录下的etc/目录中,该文件中最后一行将配置文件指向:include=/...

asnfuy
25分钟前
6
0
川普给埃尔多安和内堪尼亚胡的信

任性 https://twitter.com/netanyahu/status/1186647558401253377 https://edition.cnn.com/2019/10/16/politics/trump-erdogan-letter/index.htm...

Iridium
46分钟前
12
0
golang-mysql-原生

db.go package mainimport ("database/sql""time"_ "github.com/go-sql-driver/mysql")var (db *sql.DBdsn = "root:123456@tcp(127.0.0.1:3306)/test?charset=u......

李琼涛
今天
5
0
编程作业20191021092341

1编写一个程序,把用分钟表示的时间转换成用小时和分钟表示的时 间。使用#define或const创建一个表示60的符号常量或const变量。通过while 循环让用户重复输入值,直到用户输入小于或等于0的值...

1李嘉焘1
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部