在Drupal中有一个日志表,其中一个单元格中有多个值存储为一个字符串,如:
a:2:{s:5:"%name";s:20:"qwertyuiopasdfghjklm";s:6:"%email";s:23:"[email protected]";}
如何使用sql查询从该单元格获取电子邮件地址?
最佳答案
您可以通过多次调用SUBSTRING_INDEX来实现这一点,如下所示:
SET @a = 'a:2:{s:5:"%name";s:20:"qwertyuiopasdfghjklm";s:6:"%email";s:23:"[email protected]";}';
SELECT SUBSTRING_INDEX(
SUBSTRING_INDEX(
SUBSTRING_INDEX(
@a, '"%email"', -1
), '"', -2
), '"', 1
);
说明:
最里面的调用返回搜索字符串“%email”之后的所有内容
在示例中:
;s:23:"[email protected]";}
中间的一个返回电子邮件地址之前开始的双引号后面的所有内容:
[email protected]";}
外部一个删除字符串的尾部,包括最后一个双引号:
[email protected]
Demo
关于mysql - 来自非原子的序列化数据单元格的MySql单元格子值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25289333/