You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL查询:如何从SUBSTRING结果中仅提取数字部分?

解决方案:提取子串中的数字部分

我来帮你搞定这个数字提取的需求!你的原查询已经成功筛选出了包含[table的已发布帖子,并截取了从[table开始的16个字符,现在只需要在这个基础上,精准提取出子串里的纯数字部分即可。根据你的MySQL版本,有两种实用的实现方式:

方式1:MySQL 8.0及以上版本(推荐)

MySQL 8.0+自带的REGEXP_SUBSTR函数可以直接用正则匹配提取连续数字,写法简洁高效:

SELECT 
  REGEXP_SUBSTR(SUBSTRING(post_content, INSTR(post_content, '[table'), 16), '[0-9]+') AS substring,
  ID 
FROM `wp276_posts` 
WHERE `post_content` LIKE '%[table%' AND `post_status` = 'publish' 
ORDER BY `ID` ASC;

简单解释:

  • REGEXP_SUBSTR(目标字符串, '[0-9]+') 会自动从截取到的子串里,匹配并返回第一个连续的数字序列,完美契合你要的“仅保留数字”的需求。
  • 哪怕子串里有其他字符干扰(比如[table_22或[table-67这类格式),这个正则依然能准确抓出数字部分。

方式2:MySQL 5.x版本(兼容旧版本)

如果你还在使用MySQL 5.x(没有REGEXP_SUBSTR函数),可以用SUBSTRING结合REGEXP_INSTR组合实现:

SELECT 
  SUBSTRING(
    SUBSTRING(post_content, INSTR(post_content, '[table'), 16),
    REGEXP_INSTR(SUBSTRING(post_content, INSTR(post_content, '[table'), 16), '[0-9]'),
    LENGTH(SUBSTRING(post_content, INSTR(post_content, '[table'), 16)) - REGEXP_INSTR(SUBSTRING(post_content, INSTR(post_content, '[table'), 16), '[0-9]') + 1
  ) AS substring,
  ID 
FROM `wp276_posts` 
WHERE `post_content` LIKE '%[table%' AND `post_status` = 'publish' 
ORDER BY `ID` ASC;

简单解释:

  • REGEXP_INSTR(目标字符串, '[0-9]') 先定位到子串中第一个数字的位置,再用SUBSTRING从这个位置开始截取到子串末尾,最终得到纯数字内容。

两种方式都能输出你期望的结果:

+-----------+------+
| substring | ID   |
+-----------+------+
| 22        | 5072 |
+-----------+------+
| 67        | 5757 |
+-----------+------+
| 54        | 8550 |
+-----------+------+

内容的提问来源于stack exchange,提问作者Dudo1985

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 22:32:32