MySql 字符串中提取数字的实现示例

 更新时间:2023年09月20日 11:02:55   作者:菜鸟小杰子  
在MySQL中,有时需要从字符串中提取数字,本文就来介绍一下MySql 字符串中提取数字的实现示例,具有一定的参考价值,感兴趣的可以了解一下

一、前言

在MySQL中,有时需要从字符串中提取数字。在这种情况下,我们可以使用一些函数来实现该效果。但是,这些函数中的一些可能会提取字符串中的所有数字,而其他函数可能只会提取最长的数字字符序列。因此,我们需要了解每个函数的行为及其应用场景。

二、mysql 内置函数

1. REGEXP_REPLACE()函数

REGEXP_REPLACE()函数可以用于从字符串中删除任何不是数字的字符,留下数字字符。以下是一个例子:

SELECT REGEXP_REPLACE("abc123def456", '[^0-9]', '');
// Output: 123456

其中的正则表达式[^0-9]表示是否出现除0-9以外的字符,替换掉原来的字符串中的所有非数字字符。

2. REGEXP_SUBSTR()函数

REGEXP_SUBSTR()函数可以用于从字符串中提取匹配正则表达式的字串。以下是一个例子:

SELECT REGEXP_SUBSTR("name123_phone456", '[0-9]+');
// Output: 123

其中的正则表达式[0-9]+表示会选择字符串中的一个或多个数字。

3. SUBSTRING()函数结合正则表达式

另一种方法是使用SUBSTRING()函数和正则表达式,可以从字符串中提取数字序列。以下是一个例子:

SELECT SUBSTRING("abc123def456",LOCATE("123", "abc123def456"), 
    LOCATE("456", "abc123def456")-LOCATE("123", "abc123def456")+1);
// Output: 123def456

其中LOCATE()函数用于找到字符串中某个子字符串的位置,然后使用SUBSTRING()函数从该位置开始提取包含在“123”和“456”之间的字符串。如果你想要提取数字序列,请使用正则表达式。

三、自定义函数

下面是一个基于循环的MySQL自定义函数,用于从输入的字符串中提取所有数字字符并将其组合成一个整数:

一、函数1

DROP FUNCTION IF EXISTS `number_extract`;
DELIMITER $$
CREATE FUNCTION `number_extract`(string_inport VARCHAR(255)) 
RETURNS INT
NO SQL
BEGIN
    DECLARE ctrNumber VARCHAR(255);
    DECLARE finNumber VARCHAR(255) DEFAULT '';
    DECLARE sChar VARCHAR(1);
    DECLARE inti INTEGER DEFAULT 1;
    IF LENGTH(string_inport) > 0 THEN
        WHILE(inti <= LENGTH(string_inport)) DO
            SET sChar = SUBSTRING(string_inport, inti, 1);
            SET ctrNumber = FIND_IN_SET(sChar, '0,1,2,3,4,5,6,7,8,9'); 
            IF ctrNumber > 0 THEN
                SET finNumber = CONCAT(finNumber, sChar);
            END IF;
            SET inti = inti + 1;
        END WHILE;
        RETURN CAST(finNumber AS UNSIGNED);
    ELSE
        RETURN 0;
    END IF;    
END$$
DELIMITER ;

该函数接受一个VARCHAR(255)类型的字符串参数,并返回一个整数值。函数使用了一个while循环来遍历字符串中的每个字符。如果字符是数字,则将其添加到finNumber字符串中。在循环结束后,使用MySQL内置的CAST()函数将finNumber字符串转换为整数类型。

二、函数2

如果需要从输入的字符串中提取特定数量的连续数字字符并将其组合成一个整数,我们可以使用两个自定义函数。

DROP FUNCTION IF EXISTS `number_extract_n1`;
DELIMITER $$
CREATE FUNCTION `number_extract_n1`(string_inport VARCHAR(255), num_digits INT) 
RETURNS INT
NO SQL
BEGIN
    DECLARE ctrNumber VARCHAR(255);
    DECLARE finNumber VARCHAR(255) DEFAULT '';
    DECLARE sChar VARCHAR(1);
    DECLARE inti INTEGER DEFAULT 1;
    IF LENGTH(string_inport) > 0 AND num_digits > 0 THEN
        WHILE(inti <= LENGTH(string_inport)) DO
            SET sChar = SUBSTRING(string_inport, inti, 1);
            SET ctrNumber = FIND_IN_SET(sChar, '0,1,2,3,4,5,6,7,8,9'); 
            IF ctrNumber > 0 THEN
                SET finNumber = CONCAT(finNumber, sChar);
                IF LENGTH(finNumber) = num_digits THEN
                    SET inti = LENGTH(string_inport)+1;
                END IF;
            END IF;
            SET inti = inti + 1;
        END WHILE;
        RETURN CAST(finNumber AS UNSIGNED);
    ELSE
        RETURN 0;
    END IF;    
END$$
DELIMITER ;

该函数接受两个参数,一个VARCHAR(255)类型的字符串和一个INT类型的数字。函数返回一个整数,该整数由输入字符串中的指定数量的连续数字字符组成。

函数遍历输入的字符串并扫描每个字符,如果字符是数字,则将其添加到finNumber字符串中。在finNumber中包含所需数量的数字字符时,函数将循环终止并返回finNumber转换为整数类型的值。

三、函数3

DROP FUNCTION IF EXISTS `number_extract_n2`;
DELIMITER $$
CREATE FUNCTION `number_extract_n2`(string_inport VARCHAR(255), start_idx INT, num_digits INT) 
RETURNS INT
NO SQL
BEGIN
    DECLARE ctrNumber VARCHAR(255);
    DECLARE finNumber VARCHAR(255) DEFAULT '';
    DECLARE sChar VARCHAR(1);
    DECLARE inti INTEGER DEFAULT start_idx;
    DECLARE end_idx INTEGER DEFAULT start_idx + num_digits;
    IF LENGTH(string_inport) &gt; 0 AND num_digits &gt; 0 AND end_idx &lt;= LENGTH(string_inport) THEN
        WHILE(inti &lt;= end_idx) DO
            SET sChar = SUBSTRING(string_inport, inti, 1);
            SET ctrNumber = FIND_IN_SET(sChar, '0,1,2,3,4,5,6,7,8,9'); 
            IF ctrNumber &gt; 0 THEN
                SET finNumber = CONCAT(finNumber, sChar);
            ELSE
                RETURN 0;
            END IF;
            SET inti = inti + 1;
        END WHILE;
        RETURN CAST(finNumber AS UNSIGNED);
    ELSE
        RETURN 0;
    END IF;    
END$$
DELIMITER ;

该函数接受三个参数,一个VARCHAR(255)类型的字符串,一个INT类型的数字表示起始索引值,一个INT类型的数字表示要提取的数字字符的数量。

函数遍历输入字符串的子字符串,并扫描每个字符,如果字符是数字,则将其添加到finNumber字符串中。如果finNumber包含所需数量的数字字符,则函数将返回finNumber字符串转换为整数类型的值。如果没有提取到足够数量的连续数字字符,函数将返回0。

 四、后语

我们介绍了三个自定义函数以及MySQL内置函数REGEXP_REPLACE()、REGEXP_SUBSTR()和SUBSTRING(),这些函数可以从输入的字符串中提取数字。我们还了解了每个函数的行为及其应用场景。

REGEXP_REPLACE()函数可用于从字符串中删除任何不是数字的字符,留下数字字符。

REGEXP_SUBSTR()函数可用于从字符串中提取匹配正则表达式的字串。

SUBSTRING()函数结合正则表达式可以从字符串中提取数字序列。

自定义函数1可以从字符串中提取所有数字字符并将其组合成一个整数。

自定义函数2和3可用于从输入的字符串中提取连续数字字符,并将其组合成一个指定数量的整数。

选择适当的函数来提取数字字符是十分重要的,取决于我们需要哪些数字字符以及是否必须是连续的数字字符。在实际应用中,应该根据实际情况进行选择,以便快速高效地实现所需的结果。

到此这篇关于MySql 字符串中提取数字的实现示例的文章就介绍到这了,更多相关MySql 字符串提取数字内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL 跨库查询示例场景分析

    MySQL 跨库查询示例场景分析

    在 MySQL 数据库应用场景中,有时需要从多个数据库中获取数据并进行关联分析或综合处理,这就涉及到跨库查询操作,本指南将详细介绍 MySQL 跨库查询的方法、注意事项以及相关示例,感兴趣的朋友一起看看吧
    2025-04-04
  • mysql常用函数与视图索引全面梳理

    mysql常用函数与视图索引全面梳理

    这篇文章主要介绍了mysql的常用函数与视图索引的特点与作用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-10-10
  • PHP定时备份MySQL与mysqldump语法参数详解

    PHP定时备份MySQL与mysqldump语法参数详解

    本文为大家介绍了PHP利用mysqldump命令定时备份MySQL与mysqldump语法参数大全以及定时备份的PHP实例代码
    2018-10-10
  • mysql版本5.5.x升级到5.6.x步骤分享

    mysql版本5.5.x升级到5.6.x步骤分享

    在我做的一个项目中,最近我对生产服务器上的一系列系统软件进行了升级,包括git、nginx、MySQL和PHP。这篇文章讲的是升级MySQL的过程,其他软件的升级将在其他文章中介绍。
    2016-01-01
  • MySQL 强制使用特定索引的操作

    MySQL 强制使用特定索引的操作

    MySQL可通过FORCEINDEX、USEINDEX等语法强制查询使用特定索引,但优化器可能不采纳,需结合EXPLAIN分析执行计划,避免性能下降,注意版本差异,建议优化索引结构而非强制使用,本文介绍MySQL 强制使用特定索引的操作,感兴趣的朋友一起看看吧
    2025-07-07
  • 一文详解如何在MySQL中创建函数

    一文详解如何在MySQL中创建函数

    这篇文章主要为大家介绍了一文详解如何在MySQL中创建函数,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • MySQL产生随机数并连接字符串的方法示例

    MySQL产生随机数并连接字符串的方法示例

    这篇文章主要介绍了MySQL产生随机数并连接字符串的方法,简单分析了相关函数,并结合实例形式给出了相应的SQL语句实现方法,需要的朋友可以参考下
    2017-05-05
  • MySQL中慢SQL优化的不同方式介绍

    MySQL中慢SQL优化的不同方式介绍

    慢 SQL 的优化,主要从两个方面考虑,SQL 语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢 SQL吧
    2025-03-03
  • MySQL数据库高级查询和多表查询

    MySQL数据库高级查询和多表查询

    这篇文章主要介绍了MySQL数据库高级查询和多表查询,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • mysql创建数据库,添加用户,用户授权实操方法

    mysql创建数据库,添加用户,用户授权实操方法

    在本篇文章里小编给大家整理的是关于mysql创建数据库,添加用户,用户授权实操方法相关知识点,需要的朋友们学习下。
    2019-10-10

最新评论