mysql替代Oracleinstroracle学生信息管理系统教程
在迁移项⽬时遇到的,原项⽬的数据库使⽤的Oracle,现在要迁移到MySQL中,⽽项⽬中⽤到了Oracle的instr函数,⽽MySQL只能查⼦串是否在⽗串中,没法按照出现的次数进⾏查。
先来介绍下instr()函数:
1:instr( string1, string2 ) / instr(源字符串, ⽬标字符串)
2:instr( string1, string2 [, start_position [, nth_appearance ] ] ) / instr(源字符串, ⽬标字符串, 起始位置, 匹配序号)
string2 的值要在string1中查,是从start_position给出的数值(即:位置)开始在string1检索,检索第nth_appearance(⼏)次出现string2。
在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置。只检索⼀次,也就是说从字符的开始到字符的结尾就结束。
MySQL中要实现Oracle中instr函数功能:
forest是什么意思翻译DELIMITER $$
USE `数据库名称`$$
DROP FUNCTION IF EXISTS `func_instr_oracle`$$
promptaction什么意思CREATE DEFINER=`⽤户名`@`IP地址` FUNCTION `func_instr_oracle`(
access下载2019f_str VARCHAR(1000),
f_substr VARCHAR(100),
f_str_pos INT,
f_count INT UNSIGNED
) RETURNS INT(10) UNSIGNED
BEGIN
DECLARE i INT DEFAULT0;
DECLARE j INT DEFAULT0;
mysql语句转oracle
DECLARE v_substr_len INT UNSIGNED DEFAULT0;
DECLARE v_str_len INT UNSIGNED DEFAULT0;
SET v_str_len = LENGTH(f_str);
SET v_substr_len = LENGTH(f_substr);
-- Unsigned.
IF f_str_pos >0THEN
SET i = f_str_pos;
SET j =0;
WHILE i <= v_str_len
DO
IF INSTR(LEFT(SUBSTR(f_str,i),v_substr_len),f_substr) >0THEN
SET j = j +1;
IF j = f_count THEN
RETURN i;
END IF;
END IF;
SET i = i +1;
END WHILE;
-- Signed.
ELSEIF f_str_pos <0THEN
SET i = v_str_len + f_str_pos+1;
SET j =0;
WHILE i <= v_str_len AND i >0
DO
国外java phpIF INSTR(RIGHT(SUBSTR(f_str,1,i),v_substr_len),f_substr) >0THEN
SET j = j +1;
IF j = f_count THEN
RETURN i - v_substr_len +1;
END IF;
END IF;
SET i = i -1;
END WHILE;
ELSE
RETURN0;
END IF;
RETURN0;
END$$
DELIMITER ;
select func_instr_oracle('hello world','w',1,1) as pos;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论