两个字符串之间的 MySQL 子字符串

Posted

技术标签:

【中文标题】两个字符串之间的 MySQL 子字符串【英文标题】:MySQL substring between two strings 【发布时间】:2015-04-10 11:04:35 【问题描述】:

我需要帮助解决我的列字段的问题。 我需要在这两个不同的字符串“模式”之间提取字符串,例如:

[...string] 合约= 1234567890123350566076070666 已发行= [string ...]

我想提取 'contract=' 和 'issued=' 之间的字符串

目前我正在使用

SELECT substring(substring_index(licence_key,'contract=',-1),1,40) FROM table

问题在于,中间的这个字符串并不总是有 40 个字符,所以它不是固定长度,因此之前和之后的数据也是如此。这是一个不稳定的数据。

你知道我该怎么处理吗?

【问题讨论】:

【参考方案1】:

只需使用substring_index() 两次:

SELECT substring_index(substring_index(licence_key, 'contract=', -1),
                       'issued=', 1)
FROM table;

【讨论】:

确实很聪明...我试图在版本上迁移一个未规范化的数据库。 5.5 到 5.7(我对版本 8 有点怀疑)。它有一列包含 json 字符串,但幸运的是,整个表中 json 的结构是一致的。这为我节省了很多 CPU,我不想将所有数据放入脚本中,然后将每一行插入新表中。 顺便说一句,我知道 mysql 5.6 以上版本中的 json 支持。我只是不明白将 JSON 存储在关系数据库中的意义,除非您别无选择,或者您不必在该列中进行查找以降低数据库的复杂性。【参考方案2】:

如果此字符串不匹配,则给出总结果。

如果你想替换那么你可以这样使用。

UPDATE questions set question= REPLACE(question, '<xml></xml>', '') WHERE question like '%<xml>%';

UPDATE questions set question= REPLACE(question, substring_index(substring_index(question, '<xml>', -1), '</xml>', 1), '') WHERE question like '%<xml>%';

【讨论】:

以上是关于两个字符串之间的 MySQL 子字符串的主要内容,如果未能解决你的问题,请参考以下文章

PB中取字符串子串的函数是啥

带有字符串子字符串的SwiftUI 5.5初始化数组? [关闭]

如何更改python字符串子字符串信息

两个字符串之间的 MySQL 子字符串

[在python中使用正则表达式搜索字符串子字符串

子串子序列问题