mysql获取数字

本文介绍了一个MySQL自定义函数`GetNumber`,该函数用于从字符串中按指定位置提取连续的数字。函数接受两个参数,一个是目标字符串,另一个是检索的数字批次。当检索批次小于等于0时,返回所有不连续的数字;大于0时,返回对应批次的连续数字。示例用法展示了如何根据不同的批次参数获取不同的数字组合。
摘要由CSDN通过智能技术生成

1、定义函数

DROP FUNCTION IF EXISTS `GetNumber`;
DELIMITER $$
CREATE FUNCTION `GetNumber`(in_string VARCHAR(50), in_index INTEGER) 
RETURNS INT
NO SQL
BEGIN
    DECLARE ctrNumber VARCHAR(50);
    DECLARE finNumber VARCHAR(50) DEFAULT '';
    DECLARE sChar VARCHAR(1);
    DECLARE inti INTEGER DEFAULT 1;
    DECLARE tmp_index INTEGER DEFAULT 0;
    DECLARE tmp_continuous TINYINT DEFAULT 1;
    DECLARE tmp_find TINYINT DEFAULT 0;
    IF LENGTH(in_string) > 0 THEN
        WHILE(inti <= LENGTH(in_string)) DO
  
            SET sChar = SUBSTRING(in_string, inti, 1);
            SET ctrNumber = FIND_IN_SET(sChar, '0,1,2,3,4,5,6,7,8,9'); 
            IF ctrNumber > 0 THEN
                IF in_index > 0 THEN
                    IF inti = 1 THEN
                        SET tmp_index = tmp_index + 1;
                    ELSEIF tmp_continuous = 0 THEN
                        SET tmp_index = tmp_index + 1;
                        SET tmp_continuous = 1;
                    END IF;

                    IF tmp_index = in_index THEN
                        SET finNumber = CONCAT(finNumber, sChar);
                        SET tmp_find = 1;
                    END IF;
                ELSE
                    SET finNumber = CONCAT(finNumber, sChar);
                END IF;
            ELSE
                IF in_index > 0 THEN
                    IF tmp_find = 1 THEN
                        SET inti = LENGTH(in_string);
                    ELSE
                        SET tmp_continuous = 0;
                        SET finNumber = '';
                    END IF;
                END IF;
            END IF;
            SET inti = inti + 1;

        END WHILE;

        IF finNumber = '' THEN
            RETURN 0;
        ELSE
            RETURN CAST(finNumber AS UNSIGNED);
        END IF;
        
    ELSE
        RETURN 0;
    END IF;    
END$$
DELIMITER ;

2、使用

mysql> select GetNumber('1222df3f43fdg76df', 0);
+-----------------------------------+
| GetNumber('1222df3f43fdg76df', 0) |
+-----------------------------------+
|                         122234376 |
+-----------------------------------+
1 row in set (0.00 sec)

mysql> select GetNumber('1222df3f43fdg76df', 1);
+-----------------------------------+
| GetNumber('1222df3f43fdg76df', 1) |
+-----------------------------------+
|                              1222 |
+-----------------------------------+
1 row in set (0.00 sec)

mysql> select GetNumber('1222df3f43fdg76df', 2);
+-----------------------------------+
| GetNumber('1222df3f43fdg76df', 2) |
+-----------------------------------+
|                                 3 |
+-----------------------------------+
1 row in set (0.00 sec)

mysql> select GetNumber('1222df3f43fdg76df', 3);
+-----------------------------------+
| GetNumber('1222df3f43fdg76df', 3) |
+-----------------------------------+
|                                43 |
+-----------------------------------+
1 row in set (0.00 sec)

mysql> select GetNumber('1222df3f43fdg76df', 4);
+-----------------------------------+
| GetNumber('1222df3f43fdg76df', 4) |
+-----------------------------------+
|                                76 |
+-----------------------------------+
1 row in set (0.00 sec)

mysql> select GetNumber('1222df3f43fdg76df', 5);
+-----------------------------------+
| GetNumber('1222df3f43fdg76df', 5) |
+-----------------------------------+
|                                 0 |
+-----------------------------------+

说明
1、函数第一参数(in_string)为目标字符,第二参数(in_index)为检索第几批数字(连续数字为一批)
2、第二参数(in_index)小于等于0,表示获取所有数字(不连续),大于0表示获取对应批次的数字(检索大于实际拥有的批次,返回0)
3、找不到统一返回0

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值