MySQL获取两个字符串之间的整数值
我试图得到两个特定字符串之间的整数值,但我有点累加 完整字符串示例: “真正的ABC4字符串可能是公司机密。” 我需要在“ABC”和“”之间取“4”。首先,我想到了以下脚本: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在字符串中出现多次,它就会失败。我不能简单地增加计数器,因为我
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是的,我不得不将其转换为代码,这可能是最有效的(实际上是我唯一想到的)解决方案。