在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/

10-11 14:21