MySQL获取两个字符串之间的整数值

MySQL获取两个字符串之间的整数值,mysql,regex,Mysql,Regex,我试图得到两个特定字符串之间的整数值,但我有点累加 完整字符串示例: “真正的ABC4字符串可能是公司机密。” 我需要在“ABC”和“”之间取“4”。首先,我想到了以下脚本: select substring_index(substring_index('The real ABC4_ string is probably company secret.', 'ABC', -1),'_', 1); 它给我4,完美!但问题是,如果ABC在字符串中出现多次,它就会失败。我不能简单地增加计数器,因为我

我试图得到两个特定字符串之间的整数值,但我有点累加

完整字符串示例:

“真正的ABC4字符串可能是公司机密。”

我需要在“ABC”和“”之间取“4”。首先,我想到了以下脚本:

select substring_index(substring_index('The real ABC4_ string is probably company secret.', 'ABC', -1),'_', 1);
它给我4,完美!但问题是,如果ABC在字符串中出现多次,它就会失败。我不能简单地增加计数器,因为我不知道将来会增加多少次。我必须得到该正则表达式的第一个匹配项:ABC[数字]\u

我见过REGEXP_SUBSTR函数,但由于我们使用的是比8.0更旧的MySQL版本,所以我也不能使用它

有什么建议吗


谢谢

在不使用Regex的情况下,下面是一种使用
LOCATE()
和其他字符串函数的方法:

SET @input_string = 'The real ABC4_ string is probably company secret.';

SELECT TRIM(LEADING 'ABC' 
              FROM SUBSTRING_INDEX(
                     SUBSTR(@input_string FROM 
                       LOCATE('ABC', @input_string)
                           )
                     ,'_', 1
                     )
           ) AS number_extracted;

| number_extracted |
| ---------------- |
| 4                |
(ab)使用
LOCATE()
函数的另一种方法:

select    substr('The real ABC4_ string is probably company secret.',
   locate('ABC', 'The real ABC4_ string is probably company secret.') + 3,
      locate('_','The real ABC4_ string is probably company secret.') - 
   locate('ABC', 'The real ABC4_ string is probably company secret.') - 3) AS num;

对于这样的字符串,它失败了:SET@input_string='真正的ABC_uu字符串可能是公司秘书bc4_uuu';除了像我一样的重复案例(在前面的评论中),它工作得非常好,我同意这个答案,但亲爱的未来读者,请记住这个场景。对于这样的字符串,它失败了:SET@input_string='真正的ABC_uu字符串可能是company secretABC4';我从查询中了解到,您要查找的是第一个ABC字符串,而不是第一个uu字符串,并介于这两个字符串之间。我需要寻找所有的场景,比如1-ABC存在,2-存在,3-这两个存在之间的整数4-如果有多个满足以下规则,就选择第一个。也许你需要在应用程序代码中完成它。@RickJames是的,我不得不将其转换为代码,这可能是最有效的(实际上是我唯一想到的)解决方案。