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获取两个字符串之间的整数值的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 如何从 varchar 列中获取精确的整数值

javascript中如何将获得的整型数值转换为字节数组

MySQL常用数据类型

使用一个表中的整数值在另一个 SQL 表中查找值

获取 DatabaseError [SequelizeDatabaseError],不正确的整数值

将递增的整数值分配给mysql数据库中的列