注册
MySQL的 FIND_IN_SET 在达梦中如何转换?
专栏/龙山溪笔谈/ 文章详情 /

MySQL的 FIND_IN_SET 在达梦中如何转换?

myth8860 2021/02/22 8051 8 5
摘要 MySQL的 FIND_IN_SET 在达梦中如何转换?

最近有同学在迁移 MySQL 的时候碰到一个问题:FIND_IN_SET 在达梦中如何转换?

其实可以自定义一个 FIND_IN_SET 函数来解决,参考了一个 Oracle 解决类似问题的帖子,可以直接用

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; create table TABLE_T(id int,ids varchar(10)); insert into TABLE_T values(1,'2,33'); insert into TABLE_T values(1,'20'); insert into TABLE_T values(1,'6,88'); insert into TABLE_T values(1,'8'); insert into TABLE_T values(1,'6,12'); insert into TABLE_T values(1,'10,15'); commit; select t.* from TABLE_T t where find_in_set('6', t.ids) > 0

参考:https://blog.csdn.net/zhangkaidsy/article/details/101053481

--注:2022年10月以后的dm8版本已经支持了该函数,系统函数性能比自定义的好很多

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服