关于#sql#的问题:字段内数据由字母数字混合组成,如何提取出字段内的数字

如何提取SQL字段内的数字?
字段内数据由字母数字混合组成,如何提取出字段内的数字?

引用 皆我百晓生 小程序回复内容作答:
在 SQL 中,可以使用正则表达式来提取字段内的数字。具体的方法会因使用的数据库类型而有所不同,在以下两种常见的数据库中分别介绍。

  1. MySQL:
    可以使用 REGEXP_REPLACE 函数,结合正则表达式 (\\D) 来删除字段内的非数字字符,然后再将结果转换为数字类型,例如:

    SELECT CAST(REGEXP_REPLACE(field, '\\D', '') AS UNSIGNED) AS extracted_number
    FROM table_name;
    
  2. PostgreSQL:
    可以使用 regexp_replace 函数,结合正则表达式 (\D) 来删除字段内的非数字字符,然后再将结果转换为数字类型,例如:

    SELECT CAST(regexp_replace(field, '\D', '', 'g') AS INTEGER) AS extracted_number
    FROM table_name;
    

请将上述的 field 替换为需要提取数字的字段名称,table_name 替换为数据所在的表名。

【相关推荐】



  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/772153
  • 你也可以参考下这篇文章:如何写一条优雅的SQL原生语句?
  • 您还可以看一下 王文平老师的0行代码写服务部署版课程中的 创建自定义文件改造sql、服务注册、接口调用测试小节, 巩固相关知识点
  • 除此之外, 这篇博客: 索引的使用原则:如何通过索引让SQL查询效率最大化?中的 什么时候不需要创建索引 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

    我之前讲到过索引不是万能的,有一些情况是不需要创建索引的,这里再进行一下说明。

    WHERE 条件(包括 GROUP BY、ORDER BY)里用不到的字段不需要创建索引,索引的价值是快速定位,如果起不到定位的字段通常是不需要创建索引的。举个例子:

     

    SELECT comment_id, product_id, comment_time FROM product_comment WHERE user_id = 41251

    因为我们是按照 user_id 来进行检索的,所以不需要对其他字段创建索引,即使这些字段出现在 SELECT 字段中。

    第二种情况是,如果表记录太少,比如少于 1000 个,那么是不需要创建索引的。我之前讲过一个 SQL 查询的例子(第 23 篇中的 heros 数据表查询的例子,一共 69 个英雄不用索引也很快),表记录太少,是否创建索引对查询效率的影响并不大。

    第三种情况是,字段中如果有大量重复数据,也不用创建索引,比如性别字段。不过我们也需要根据实际情况来做判断,这一点我在之前的文章里已经进行了说明,这里不再赘述。

    最后一种情况是,频繁更新的字段不一定要创建索引。因为更新数据的时候,也需要更新索引,如果索引太多,在更新索引的时候也会造成负担,从而影响效率。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^