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) > 0 AND num_digits > 0 AND end_idx <= LENGTH(string_inport) THEN
        WHILE(inti <= 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 > 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可用于从输入的字符串中提取连续数字字符,并将其组合成一个指定数量的整数。

选择适当的函数来提取数字字符是十分重要的,取决于我们需要哪些数字字符以及是否必须是连续的数字字符。在实际应用中,应该根据实际情况进行选择,以便快速高效地实现所需的结果。文章来源地址https://www.toymoban.com/news/detail-698283.html

到了这里,关于MySql 字符串中提取数字的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mysql中的实现字段或字符串拼接的三种方式

    concat函数是将多个字段或字符串拼接为一个字符串;但是字符串之间没有任何分隔。 concat函数官方介绍 执行结果如下: 执行结果如下: 如果拼接的字段中有一个为null,则结果为null。 执行结果如下: concat_ws函数将多个字段或字符串拼接为一个字符串,且字符串直接可以指定

    2024年02月22日
    浏览(89)
  • MySQL字符串转数字三种方式

    MySQL数据表t的c1列是varchar字符串类型,存储如下记录, 如果按照\\\"T+数字\\\"中的\\\"数字\\\"排序,常规的操作order by c1,执行是错误的,实际上按照字符串的ASCII排序的, 如果顺着想,字符串截取出\\\"T+数字\\\"中的\\\"数字\\\"排序, 还是不对的,因为本质上,还是按照字符串进行的排序, 针

    2024年02月09日
    浏览(45)
  • mysql获取第一个逗号前面的字符串

    字符串内容如下: 想获取,第一个逗号前面的字符串,即:统编版(2019) 需要第一获取逗号的下标位置,然后再截取字符串 获取逗号的函数使用:LOCATE 结果如下:  然后使用 left 函数截取字符串,代码如下: 结果如下: 统编版(2019)

    2024年02月13日
    浏览(42)
  • MySQL 将字符串转换为数字类型并进行排序

    示例数据:area_gdp 表 id    area    gdp 1    北京    1200 2    上海    6100 3    广州    6000 4    深圳    980 select * from area_gdp ORDER BY gdp ASC # 查询结果如下 1    北京        1200 3    广州     6000 2    上海        6100 4    深圳     980 SELECT * FROM area_gdp OR

    2024年02月05日
    浏览(44)
  • unity 提取 字符串中 数字 修改后返回 字符串

    参考博主:unity 提取字符串数字修改后返回字符串_unity string提取数字_lvcoc的博客-CSDN博客  正数和浮点数的 正则表达式 示例: 用例:“z = 0.08596656649430752LAI  +  0.032354611497339036Aspect  +  0.07883658697039622Humidity  +  58.427987942231184” 打印结果:z = 0.085LAI  +  0.032Aspect  +  0.078H

    2024年02月11日
    浏览(52)
  • MYSQL: sql中某一个字段内容为用逗号分割的字符串转换成多条数据(适用于部分树机构)

    1.创建表的示例 数据如下图: SELECT a.id,SUBSTRING_INDEX(SUBSTRING_INDEX(a.userName,‘,’,b.help_topic_id+1),‘,’,-1) as name from tbl_name a left join mysql.help_topic b on b.help_topic_id (LENGTH(a.userName)-LENGTH(REPLACE(a.userName,‘,’,‘’))+1) ORDER BY a.id; 本人需求为 图层树的父级节点都在 ancestors 字段中,需要获取

    2024年02月11日
    浏览(67)
  • C# 如何提取字符串中的数字

    1、纯数字提取 2、带有小数点数字提取

    2024年02月13日
    浏览(48)
  • 用python提取字符串中的数字

    # 1. 总体思路 ## 1.1. 获取一个字符串 from_string ## 1.2. 取出 from_string 的第一个数字 ### 1.2.1. 遍历 from_string ,找到第一个数字 ### 1.2.2. 存到 get_numbers 列表中 ### 1.2.3. 计算出第一个数字在 from_string 的位置 start_num ## 1.3. 从第一个数字处开始,遍历 from_string ### 1.3.1. 从第

    2023年04月11日
    浏览(40)
  • 如何使用Python从字符串中提取数字?

    阅读更多:Python 教程 正则表达式是一种专门用于字符串匹配的工具,在Python中有re模块支持正则表达式操作。通过正则表达式,可以匹配和提取字符串中的数字。具体实现代码如下: Python Copy 代码中,使用 re.findall 函数匹配字符串中的数字,匹配规则由正则表达式r’d+’定

    2024年02月12日
    浏览(52)
  • [MSSQL]自定义函数之从字符串提取数字

    之前写过从字符串中提取字母。某些场景需要从字符串中提取字母。

    2024年01月25日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包