qq_30206703
陆特过后DIY
采纳率100%
2021-03-09 12:37

mysql中正则表达式如何提取连续的数字串

原始数据如下(希望提取到连续的8位数字):

                name                                    SS    
    师傅门前桃花多_13577924.zip
《独联体国家“颜色革命”研究》12781713.zip

使用的mysql语句:

UPDATE 表 SET SS =name REGEXP '[0-9]{8}'

期望得到的结果:

                name                                    SS    
    师傅门前桃花多_13577924.zip                        13577924
《独联体国家“颜色革命”研究》12781713.zip                12781713

最后得到的结果只有0

烦请大佬指点一下

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

4条回答

  • QA_Assistant 有问必答小助手 1月前

    您好,我是问答小助手,你的问题已经很多小伙伴为您解答了问题,您看下是否解决了您的问题。

    如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

    点赞 1 评论 复制链接分享
  • technologist_02 CSDN问答专家001 1月前

    你应该是理解错了REGEXP用法了,REGEXP是正则表达式:

    name REGEXP '[0-9]{8}'
    
    #返回的值是1或者0

    所以你上面写的有问题,想获得其中数字的话,可以用substring函数

    select substring(substring(name FROM -12),1,8) from 表;
    点赞 评论 复制链接分享
  • qq_30206703 陆特过后DIY 1月前

    同步此问题处理进度,因mysql版本非8.0,无法使用REGEXP_SUBSTR();

    于是编写了python程序读取数据库数据经正则处理以后重新写入数据库,但数据库约400万条数据,SELECT扫描过久,放弃;

    最终采用把数据导入csv以后,使用EmEditor的CSV模式,加上正则匹配,几分钟处理掉问题,重新把处理后的数据上传数据库,问题解决!

    点赞 评论 复制链接分享
  • lhzlhk lhzlhk 1月前

    regexp 一般用在 where 子句中,用于返回 1/0. 如果想用正则提取子串的话,可以用 regexp_substr(name, '[0-9]{8}') 直接取。

    点赞 评论 复制链接分享