mysql中实现orcal的instr函数

mysql中具有instr函数,但是这个函数只有两个参数,第一个参数为字符串,第二个参数为需要查询的字符串,返回的结果是第一次出现的位置。
但是orcal中的instr函数具有四个参数,前两个参数一样,但是后面可定义查询的起始位置和第几次出现。

CREATE DEFINER=`root`@`192.168.1.%` FUNCTION `instr1`(
IN_STR1 varchar(2500),#父字符串
IN_STR2 varchar(2500),#需要查询的字符串
IN_STARTPOS int(10),#起始位置
IN_NUM int(10) #次数
) RETURNS int(11)
BEGIN

###############################
## instr1('12325','2',4,1); 返回 4
##################################

declare str1_length int(10);
declare str2_length int(10);
declare result int(10) default 0;
declare postion int(10);
declare str1 varchar(2500);
declare NUM int(10);
declare i int(10);

set str1_length=length(IN_STR1);
set str2_length=length(IN_STR2);

#字符串长度+起始位置-1 大于父字符串 那么返回0
if(str1_length<(str2_length+IN_STARTPOS-1)) then return 0;end if;

##次数小于1
if IN_NUM<1  THEN RETURN 0; end if;

set str1=SUBSTR(IN_STR1,IN_STARTPOS);##获取第一次的父
set result=IN_STARTPOS-1;##获取初始位置
set NUM=IN_NUM;

lp1:while NUM>0 do
 set postion=instr(str1,IN_STR2);
 if postion=0 then set result=0; leave lp1; end if;##只要有一次没找到就是失败
  set result=result+postion;
  
	set NUM=NUM-1;
	if NUM>0 THEN set str1=SUBSTR(str1,postion+1);end if;#获取下一次的父
	
end while;


return result;
END

这个函数没有实现起始位置为负数的时候,从右边进行查找的功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL和Oracle是两种不同的关系型数据库管理(RDBMS),它们在一些方面有一些区别。 1. 开发者和社区支持:MySQL是由MySQL AB公司开发的,并且拥有一个庞大的开发者社区,提供广泛的文档、教程和支持。Oracle是由Oracle Corporation开发的,也有庞大的开发者社区,但其商业性质较强,相应的支持可能更为全面。 2. 许可和成本:MySQL采用GNU通用公共许可证(GPL),属于开源软件,可以免费使用,但也有商业版本提供额外功能和支持。Oracle则是商业软件,需要购买许可证才能使用,具有相应的费用。 3. 功能和扩展性:Oracle在企业级应用方面提供了更多的功能和扩展性。它支持更广泛的数据类型、复杂的查询和高级特性,如分区表、集群和复制等。MySQL则更加简洁和易于使用,适合小型到型应用。 4. 性能和可伸缩性:Oracle在大规模应用和高负载环境下性能表现较好,具备更好的可伸缩性和并发处理能力。MySQL在小规模应用和低负载环境下表现得更好,但在大规模和高并发情况下可能需要额外的调优和配置。 5. 支持的平台和生态系统:Oracle支持多种操作系统和平台,包括Windows、Linux和UNIX等。它还具有强大的生态系统,提供了丰富的工具、框架和第三方集成。MySQL也支持多种平台,但相对于Oracle来说,其生态系统可能不如Oracle完善。 总体而言,选择使用MySQL还是Oracle取决于具体的需求、预算和应用规模。如果您需要更高级的功能和支持,并且有相应的预算,那么Oracle可能是更好的选择。如果您对成本敏感且应用规模较小,那么MySQL可能更适合您。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值