zoukankan      html  css  js  c++  java
  • Oracle 实现与mysql中find_in_set函数的兼容

    Oracle 实现与mysql中find_in_set函数的兼容

    find_in_set(str,strList),寻找str在strList中的位置。

    sql代码:

    1.  
      -- 返回结果为1,
    2.  
      SELECT FIND_IN_SET('1','1,2,3') FROM DUAL;

    sql代码:

    1.  
      -- 返回结果为2
    2.  
      SELECT FIND_IN_SET('1','2,1,3') FROM DUAL;

    具体创建函数如下:

    sql代码:

    create or replace FUNCTION 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(2000) := piv_str2; -- 将piv_str2赋值给piv_str
    res number:=0; -- 返回结果
    res_place number:=0;-- 原字符串在目标字符串中的位置
    BEGIN
    -- 如果字段是null 则返回0
    IF piv_str2 IS NULL THEN
    RETURN res;
    END IF;
    -- 如果piv_str中没有分割符,直接判断piv_str1和piv_str是否相等,相等 res_place=1
    IF instr(piv_str, p_sep, 1) = 0 THEN
    IF piv_str = piv_str1 THEN
    res_place:=1;
    res:= res_place;
    END IF;
    ELSE
    -- 循环按分隔符截取piv_str
    LOOP
    l_idx := instr(piv_str,p_sep);
    --
    res_place := res_place + 1;
    -- 当piv_str中还有分隔符时
    IF l_idx > 0 THEN
    -- 截取第一个分隔符前的字段str
    str:= substr(piv_str,1,l_idx-1);
    -- 判断 str 和piv_str1 是否相等,相等则结束循环判断
    IF str = piv_str1 THEN
    res:= res_place;
    EXIT;
    END IF;
    piv_str := substr(piv_str,l_idx+length(p_sep));
    ELSE
    -- 当截取后的piv_str 中不存在分割符时,判断piv_str和piv_str1是否相等,相等 res=res_path
    IF piv_str = piv_str1 THEN
    res:= res_place;
    END IF;
    -- 无论最后是否相等,都跳出循环
    EXIT;
    END IF;
    END LOOP;
    -- 结束循环
    END IF;
    -- 返回res
    RETURN res;
    END FIND_IN_SET;

    对于某些查询mysql只需写出表达式就可以了,但是我写的oracle的需要写出表达式出来
    例如:
    sql代码:

    select * from tableA a left join tableB b on FIND_IN_SET(a.id ,b.aid) ;   -- mysql这样写就可以了   
    

    sql代码:

    select * from tableA a left join tableB b on FIND_IN_SET(a.id ,b.aid) >0; -- oracle就要写出具体的表达式  
  • 相关阅读:
    jQuery瀑布流绝对定位布局(二)(延迟AJAX加载图片)
    jQuery图片上传裁剪插件imgAreaSelect(分析四) 上传服务器端
    jQuery表格的排序,
    jQuery图片上传裁剪插件imgAreaSelect(分析二) 同步显示图像位置信息
    jQuery图片上传裁剪插件imgAreaSelect(分析三) 如何获得选择域的图像信息
    JS Get URL param
    Dictionary 比List占用更多的内存
    修改金蝶采购订单的默认采购方式
    sqlserver 数据库操作记录 实现
    用Python模拟键盘输入
  • 原文地址:https://www.cnblogs.com/mayhh/p/11189284.html
Copyright © 2011-2022 走看看