前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL数据库如何提取字符串里的所有数字

MySQL数据库如何提取字符串里的所有数字

作者头像
用户1289394
发布2023-08-22 16:16:35
8540
发布2023-08-22 16:16:35
举报
文章被收录于专栏:Java学习网Java学习网

在 MySQL 中,可以使用正则表达式结合内置函数来提取字符串中的所有数字。下面介绍两种方法:

方法一:使用 REGEXP 和 SUBSTRING 函数

假设我们有一个名为 str 的字符串,其中包含数字和非数字混合的字符。现在需要将该字符串中的所有数字提取出来,并以逗号分隔返回结果。

以下 SQL 语句可以实现上述功能:

代码语言:javascript
复制
复制代码SELECT 
    GROUP_CONCAT(SUBSTRING(str, loc, reg_len)) AS nums
FROM (
    SELECT
        str,
        loc,
        CHAR_LENGTH(REGEXP_REPLACE(str, '[0-9]+', '')) AS reg_len
    FROM 
        (SELECT '1abc2defg345hij6' AS str) tmp,
        (SELECT @i := 0) num
    WHERE 
        (@i := LOCATE(@i+1, str)) > 0
) t
WHERE 
    loc > 0;

该 SQL 语句执行的步骤如下:

  1. 使用 LOCATE() 函数获取字符串中每个数字出现的位置;
  2. 使用 CONCAT() 函数连接数字,生成新字符串;
  3. 使用 GROUP_CONCAT() 函数将所有数字连接起来,并以逗号分隔。

需要注意的是,LOCATE() 函数是区分大小写的,如果需要不区分大小写,则可使用 LOWER() 或 UPPER() 函数将字符串转化为统一的大小写形式后再执行 LOCATE() 函数。

方法二:使用 REGEXP 和 REPLACE 函数

除此之外,还可以利用 MySQL 的内置函数将字符串中的非数字字符逐个替换为空字符串,从而提取所有的数字。以下 SQL 语句可以实现相同的功能:

代码语言:javascript
复制
复制代码SELECT 
    REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE('1abc2defg345hij6', ' ', ''), '.', ''), ',', ''), ';', ''), ':', ''), '"', ''), '\'', ''), '`', ''), '-', '') AS nums;

该 SQL 语句执行的步骤如下:

  1. 使用 REPLACE() 函数对字符串中的空格、点号、逗号、分号、冒号、引号、连字符、反撇号等字符进行逐一替换为空字符串;
  2. 返回结果字符串。

这里需要注意的是,REPLACE() 函数在替换时只能一次性替换一个字符,因此需要在 SQL 中使用多个 REPLACE() 函数对字符串中的不同字符进行替换。

总结

在 MySQL 中,可以利用内置函数及正则表达式,快速提取字符串中的所有数字并返回。两种方法各有优缺点,在应用场景下选择更适合的方法进行处理即可。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-06-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Java学习网 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档