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

如何在MariaDB/MySQL中提取字符串‘-’与‘/’之间的数字?

在MariaDB中提取字符串中'-'和'/'之间的数字

你需要提取code字段中最后一个'-'之后、第一个'/'之前的数字,之前的查询失败是因为错误地用空格作为分割符,但你的code字段里没有空格,导致INSTR(code, ' ')返回0,SUBSTR截取了空内容。

以下是两种可行的解决方案:

方法一:使用字符串函数组合

通过定位最后一个'-'和第一个'/'的位置,直接截取目标数字:

SELECT 
    id, 
    product, 
    code,
    SUBSTRING(
        code,
        -- 计算最后一个'-'的下一个字符位置
        LENGTH(code) - INSTR(REVERSE(code), '-') + 2,
        -- 计算需要截取的长度:'/'的位置 - 起始位置
        INSTR(code, '/') - (LENGTH(code) - INSTR(REVERSE(code), '-') + 2)
    ) AS output
FROM products
ORDER BY CAST(output AS UNSIGNED) ASC;

说明:

  • INSTR(REVERSE(code), '-'):反向查找第一个'-'的位置,对应原字符串的最后一个'-'
  • LENGTH(code) - 反向位置 +1:得到原字符串中最后一个'-'的索引,加2就是从'-'后第一个字符开始截取
  • INSTR(code, '/'):找到第一个'/'的位置,两者的差值就是需要截取的长度

方法二:使用正则表达式替换

利用REGEXP_REPLACE直接匹配并提取目标数字,更简洁:

SELECT 
    id, 
    product, 
    code,
    REGEXP_REPLACE(code, '^.*-(\\d+)/.*$', '\\1') AS output
FROM products
ORDER BY CAST(output AS UNSIGNED) ASC;

说明:

  • ^.*-:贪婪匹配从字符串开头到最后一个'-'的所有内容
  • (\\d+):捕获'-'后到'/'前的所有数字(括号是捕获组)
  • /.*$:匹配'/'到字符串结尾的所有内容
  • 替换为\\1:保留捕获组中的数字,丢弃其他内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:15:49