千家信息网

Mysql中函数如何在dm中使用

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,这篇文章主要介绍Mysql中函数如何在dm中使用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、问题1、mysql中存在FIND_IN_SET函数,但是在dm中是不存在的。解
千家信息网最后更新 2025年02月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安全错误 数据库的锁怎样保障安全 亿球通网络技术有限公司好吗 邹平家具管理软件开发 sa无法登录数据库 公网访问公司内网数据库 阿克苏市万达信息网络技术有限责任公司 我的世界开简单的生存服务器 网络安全执行e标准 iis 数据库连接信息 吉安计算机网络技术去哪学 逆战服务器频道不全 数据库.myd 网络安全最关心的三属性英文 网络安全专业就业数据 零基础软件开发程序员靠谱吗 另一个王者荣耀服务器怎么登陆 电脑数据库可以开发什么业务 怎么查源码里的数据库 pop3邮件服务器qq 都市重生互联网科技小说 软件开发怎样获得国家认可 服务器到交换机距离 河北互联网软件开发大概多少钱 网络安全周集中宣传版面 守护网络安全我们应该怎么做 服务器安全狗如何安装 数据库tempdb非常大 软件开发公司综合评分办法 网络安全与信息化考研方向 服务器盘序 删除数据库使用语句
0