千家信息网

Mysql中函数如何在dm中使用

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要介绍Mysql中函数如何在dm中使用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、问题1、mysql中存在FIND_IN_SET函数,但是在dm中是不存在的。解
千家信息网最后更新 2026年11月03日Mysql中函数如何在dm中使用

这篇文章主要介绍Mysql中函数如何在dm中使用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

一、问题

1、mysql中存在FIND_IN_SET函数,但是在dm中是不存在的。解决办法手动创建FIND_IN_SET()函数在dm是可以实现的,并调用使用的。但是当结果集比较大的时候,效率很低。数据量小的时候可以使用。当时数据量比较大的时候使用FIND_IN_SET函数,在dm使用会出现字符集截断的问题。基于以上的问题。在dm使用instr()函数代替FIND_IN_SET函数。可以解决效率低和字符串截断的问题问题。

2、mysql中存在 group_concat()函数。但在dm里是没有的。可以使用oracle中wm_concat或者dm的LISTAGG/LISTAGG2 集函数来代替。Dm中LISTAGG/LISTAGG2 集函数和oracle中LISTAGG/LISTAGG2 集函数使用方法是一样的。

二、FIND_IN_SET函数

1、Mysql的定义:

MySQL手册中find_in_set函数的语法解释:

FIND_IN_SET(str,strlist)。str 要查询的字符串 strlist 参数以,分隔的字段名 如 (1,2,6,8,10,22)查询字段(strlist)中包含(str)的结果,返回结果为null或记录假如字符串str在由N个子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间 一个字符串列表就是一个由一些被 , 符号分开的子链组成的字符串如果第一个参数是一个常数字符串,而第二个是type SET列,则FIND_IN_SET() 函数被优化,使用比特计算 如果str不在strlist 或strlist 为空字符串,则返回值为 0 如任意一个参数为NULL,则返回值为 NULL这个函数在第一个参数包含一个逗号(,)时将无法正常运行。

SELECT FIND_IN_SET('b', 'a,b,c,d');结果为:2因为b 在strlist集合中放在2的位置 从1开始select FIND_IN_SET('1', '1'); 返回 就是1 这时候的strlist集合有点特殊 只有一个字符串 其实就是要求前一个字符串 一定要在后一个字符串集合中才返回大于0的数。select FIND_IN_SET('2', '1,2'); 返回2 。select FIND_IN_SET('6', '1'); 返回0 strlist中不存在str,所以返回0。

2、自定义的find_in_set()

create or replace

function FIND_IN_SET2

(

piv_str1 varchar2,

piv_str2 varchar2)

return int deterministic

as

rt int default 0;

begin

with

a as

(

select

regexp_substr(sqlstr, '[^,]+', 1, level) rval,

rownum rid

from

(

select piv_str2 sqlstr from dual

)

connect by level<=regexp_count(sqlstr, ',')+1

)

select

nvl(rid, 0)

into

rt

from

dual

left join

(

select rid from a where rval=piv_str1

)

on

1=1;

return rt;

end;

3、网上配置在oracle中的find_in_set()函数定义

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(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 FIND_IN_SET;

4、函数调用案例find_in_set()进行查询数据,报字符串截断。

使用instr替代后下效果如下

使用instr替代后下效果如下


使用instr替代后下效果如下

三、group_concat()函数

1、mysql中group_concat()函数的定义

功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。

语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator '分隔符'] )

说明:通过使用distinct可以排除重复值;如果希望对结果中的值进行排序,可以使用order by子句;separator是一个字符串值,缺省为一个逗号。

2、在dm用wm_concat或者dm的LISTAGG/LISTAGG2 集函数

1、wm_concat

介绍:其函数在Oracle 10g推出,在10g版本中,返回字符串类型,在11g版本中返回clob类型。

括号里面的参数是列,而且可以是多个列的集合,也就是说在括号里面可以自由地用'||'合并字符串。

用法1: Select aaa, wmsys.wm_concat(bbb || '(' || ccc || ')' ) from table group by aaa

用法2: Select aaa, wmsys.wm_concat(bbb || '(' || ccc || ')' ) over(partition by aaa) from table

举例:


2、LISTAGG() 简介

介绍:其函数在Oracle 11g 版本中推出,对分组后的数据按照一定的排序进行字符串连接。

其中,"[,]"表示字符串连接的分隔符,如果选择使用[over (partition by )]则会使其变成分析函数;

用法1: SELECT aaa, listagg(bbb,',') within GROUP (ORDER BY aaa) FROM table GROUP BY aaa

用法2: SELECT aaa, listagg(bbb,',') within GROUP (ORDER BY aaa) over(partition by aaa) FROM table

举例:listagg(ORGAN_CODE, ',')within group( order by1) listagg

以上是"Mysql中函数如何在dm中使用"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

函数 字符 字符串 分隔符 结果 参数 字段 问题 数据 循环 就是 效果 时候 版本 排序 查询 位置 内容 括号 效率 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 保险科技 互联网保险 广州紫鲸互联网科技有限公司 涨乐互联网科技 互联网公司 科技公司 互联网金融与金融科技 西安互联网科技 未来的互联网科技 汇久创客互联网科技 互联网养老 桔豆科技 老年人脱离互联网科技的作文 移动互联网科技股 互联网金融科技公司干啥的 互联网科技与管理 中国互联网公司排名锤子科技 富国互联网金融科技混合基金 上海互联网科技公司ppt 互联网领先科技活动 互联网对科技影响 北京品多多互联网科技有限公司 河南商务圈互联网科技有限公司 云之行互联网科技 重生之互联网科技帝国 腾讯科技 互联网女皇 中盈科技互联网信息有限公司 阿里巴巴算科技企业还是互联网 南平创想时代互联网科技有限公司 华夏互联网科技业 洛阳共同富裕互联网科技有限公司 上海创道互联网络科技有限公司 2021世界互联网领先科技成果发布
0