在MySQL中提取两个字符串之间的子字符串

37

我需要帮助解决我的列字段问题。

我需要提取这两个不同“模式”字符串之间的字符串,例如:

[...字符串] contract= 1234567890123350566076070666 issued= [字符串 ...]

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

目前我正在使用

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

问题在于这个字符串中间的内容并非总是固定为40个字符,所以它不是定长的,前后的数据也都是不稳定的数据。

你知道我该如何处理吗?

2个回答

93

只需使用 substring_index() 两次:

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

确实聪明……我正在尝试将版本5.5上的非规范化DB迁移到5.7(对版本8有些怀疑)。它有一个包含JSON字符串的列,但幸运的是,整个表格中JSON的结构是一致的。这为我节省了很多CPU,我不想把所有数据都放到脚本中,然后再将每一行插入新表中。 - Fr0zenFyr
顺便提一下,我知道mySQL 5.6以上版本支持JSON。但是,我认为在关系型数据库中存储JSON除非没有其他选择或者您永远不需要在该列中查找以减少数据库的复杂性,否则没有意义。 - Fr0zenFyr

1
如果这个字符串不匹配,那么就给出总结果。
如果你想要替换,可以像这样使用。
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>%';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接