Implementation of Oracle's INSTR function MySQL

Source: Internet
Author: User

Implementation of Oracle's INSTR function MySQL
In a migration project, the instr function of MySQL can only find whether the child string is in the parent string. Here I wrote one for migration. Of course, here I only focus on migration, and may not fully implement the details of the original function.

Oracle uses the following calls several times,

SQL> select instr ('this is belong to you, but not to me. ',' to ',) as pos from dual; POS ------------------ 16 used time: 00: 00: 00.00SQL> select instr ('this is belong to you, but not to me. ', 'to', 1, 2) as pos from dual; POS ------------------ 32 used time: 00: 00: 00.00SQL> select instr ('this is belong to you, but not to me. ', 'belong',-) as pos from dual; POS ------------------ 9 used time: 00: 00: 00.00SQL> select instr ('this is belong to you, but not to me. ', 'belong',-1, 2) as pos from dual; POS ------------------ 0 used time: 00: 00: 00.00
The results in MySQL are as follows,
mysql> select func_instr_oracle('This is belong to you, but not to me.','to',1,1) as pos;+------+| pos  |+------+|   16 |+------+1 row in set (0.00 sec)mysql> select func_instr_oracle('This is belong to you, but not to me.','to',1,2) as pos;+------+| pos  |+------+|   32 |+------+1 row in set (0.00 sec)mysql> select func_instr_oracle('This is belong to you, but not to me.','belong',-1,1) as pos;+------+| pos  |+------+|    9 |+------+1 row in set (0.00 sec)mysql> select func_instr_oracle('This is belong to you, but not to me.','belong',-1,2) as pos;+------+| pos  |+------+|    0 |+------+1 row in set (0.00 sec)

The code for func_instr_oracle function is attached:

DELIMITER $$USE `oracle12c`$$DROP FUNCTION IF EXISTS `func_instr_oracle`$$CREATE DEFINER=`root`@`localhost` FUNCTION `func_instr_oracle`(    f_str VARCHAR(1000), -- Parameter 1    f_substr VARCHAR(100),  -- Parameter 2    f_str_pos INT, -- Postion    f_count INT UNSIGNED -- Times    ) RETURNS INT(10) UNSIGNEDBEGIN      -- Created by ytt. Simulating Oracle instr function.      -- Date 2015/12/5.      DECLARE i INT DEFAULT 0; -- Postion iterator      DECLARE j INT DEFAULT 0; -- Times compare.      DECLARE v_substr_len INT UNSIGNED DEFAULT 0; -- Length for Parameter 1.      DECLARE v_str_len INT UNSIGNED DEFAULT 0;  -- Length for Parameter 2.      SET v_str_len = LENGTH(f_str);       SET v_substr_len = LENGTH(f_substr);      -- Unsigned.      IF f_str_pos > 0 THEN        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) > 0 THEN            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 <0 THEN        SET i = v_str_len + f_str_pos+1;        SET j = 0;        WHILE i <= v_str_len AND i > 0         DO          IF INSTR(RIGHT(SUBSTR(f_str,1,i),v_substr_len),f_substr) > 0 THEN            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;      -- Equal to 0.      ELSE        RETURN 0;      END IF;      RETURN 0;    END$$DELIMITER ;

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.