MySQL如何实现oracle函数INSTR的功能
admin
2023-05-06 20:01:58
0

下文我给大家简单讲讲关于MySQL如何实现oracle函数INSTR的功能,大家之前了解过相关类似主题内容吗?感兴趣的话就一起来看看这篇文章吧,相信看完MySQL如何实现oracle函数INSTR的功能对大家多少有点帮助吧。

Oracle 里用了几次如下的调用,

SQL> select instr('This is belong to you, but not to me.','to',1,1) as pos from dual;
                 POS                              
--------------------                              
                  16                              
已用时间:  00: 00: 00.00
SQL> select instr('This is belong to you, but not to me.','to',1,2) as pos from dual;
                 POS                              
--------------------                              
                  32                              
已用时间:  00: 00: 00.00
SQL> select instr('This is belong to you, but not to me.','belong',-1,1) as pos from dual;
                 POS                              
--------------------                              
                   9                              
已用时间:  00: 00: 00.00
SQL> select instr('This is belong to you, but not to me.','belong',-1,2) as pos from dual;
                 POS                              
--------------------                              
                  0                              
已用时间:  00: 00: 00.00

MySQL里效果如下,

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)

附上函数func_instr_oracle的代码:

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) UNSIGNED
BEGIN
      -- 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 ;

大家觉得MySQL如何实现oracle函数INSTR的功能这篇文章怎么样,是否有所收获。如果想要了解更多相关,可以继续关注我们的行业资讯板块。 

相关内容

热门资讯

“爱泼斯坦被软禁时,性侵了我” 据英国广播公司BBC报道,一名曾遭受杰弗里·爱泼斯坦性侵的幸存者讲述了这位已故性侵犯者,在因引诱未成...
凤凰女记者战地日记丨一边装行李... 今天早上起来一睁眼,就看看伊朗的局势。美伊昨晚在波斯湾又发生了零星冲突,凌晨12点伊朗说靠近格什姆岛...
菲军方称向参议院派兵负责安保执... 新华社马尼拉5月13日电(记者赵晨捷 李萌)菲律宾武装部队13日发表声明称,当天出现在参议院内的军方...
公众进入武汉大学已无需预约,带... 据“正在新闻”微信公众号、“中国网湖北”微信公众号消息,5月13日,多位市民发视频表示,社会公众进入...
以总理办公室:内塔尼亚胡在对伊... △内塔尼亚胡(资料图)当地时间5月13日晚,以色列总理办公室发表声明称,在“咆哮的狮子”军事行动期间...
伊朗外长:科威特“非法”攻击伊... △伊朗外长阿拉格齐(资料图)当地时间13日晚,伊朗外长阿拉格齐对外表示,科威特“非法”攻击了一艘伊朗...
欧盟召开紧急会议,协调应对汉坦... 当地时间13日,欧盟各成员国常驻欧盟代表在布鲁塞尔举行紧急会议,重点讨论在汉坦病毒疫情背景下加强跨境...
菲律宾总统称未下达逮捕德拉罗萨... 新华社马尼拉5月13日电(记者赵晨捷 李萌)据菲律宾媒体报道,菲总统马科斯13日称未下达逮捕参议员德...
时隔九年再度来京,特朗普有何诉... ◆5月12日,特朗普登上“空军一号”前对着镜头挥手告别。(图源:美联社)文/何平编辑/漆菲5月13日...
硬科技管控,中美关系的新压舱石 特朗普此次访华,英伟达CEO黄仁勋随行的消息提振美股市场,凸显芯片与人工智能已成为中美关系的核心议题...