MySQL获取两个字符串之间的整数值
Posted
技术标签:
【中文标题】MySQL获取两个字符串之间的整数值【英文标题】:MySQL Get the integer value between two strings 【发布时间】:2019-10-09 11:27:27 【问题描述】:我正在尝试获取两个特定字符串之间的整数值,但我有点堆叠。
完整字符串示例:
“真正的 ABC4_ 字符串可能是公司机密。”
我需要在“ABC”和“_”之间找到“4”。首先我想出了以下脚本:
select substring_index(substring_index('The real ABC4_ string is probably company secret.', 'ABC', -1),'_', 1);
它给了我 4 个,完美!但问题是如果 ABC 在字符串中出现不止一次,它就会失败。我也不能简单地增加计数器,因为我不知道将来会增加多少次。我必须首先出现该正则表达式:ABC[DIGIT]_
我见过 REGEXP_SUBSTR 函数,但由于我们使用比 8.0 更旧的 mysql 版本,所以我也不能使用它。
有什么建议吗?
谢谢!
【问题讨论】:
也许你需要在应用代码中做。 @RickJames 是的,我不得不将其移至代码中,这可能是最有效(实际上是我想出的唯一一个)解决方案。 【参考方案1】:不使用正则表达式,这是使用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 |
View on DB Fiddle
【讨论】:
对于这样的字符串,它会失败:SET @input_string = '真正的 ABC_ 字符串可能是公司机密ABC4_。'; 除了像我这样的重复案例(在之前的评论中)它工作得很好,我正在批准答案,但请记住这种情况,亲爱的未来读者。【参考方案2】:另一种(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_ 字符串可能是公司机密ABC4_。';正如我从查询中了解到的那样,您正在寻找第一个 ABC 字符串而不是第一个 _ 字符串,并在这两者之间找到。我需要查找所有场景,例如 1- ABC 存在,2- _ 存在,3- 这两者之间存在整数 4- 如果有多个满足以下规则,则取第一个。以上是关于MySQL获取两个字符串之间的整数值的主要内容,如果未能解决你的问题,请参考以下文章