比较序列化字符串MySQL Query中的日期

时间:2013-05-23 17:46:47

标签: mysql date serialization

这不是我的代码,我需要在不修改表结构的情况下完成它。我知道将日期存储为MySQL日期格式会很容易,但我不能这样做。

表中有一列将序列化数组存储为字符串。现在我需要选择'date'小于今天的所有行。

此日期在序列化数组字符串内。

有没有办法在mysql查询上进行比较?示例字符串是:

a:3:{s:4:"test";b:1;s:2:"se";i:1;s:4:"date";s:10:"2013-05-23";}

我需要使用以下查询将此字符串中的“日期”与mysql日期进行比较:

"date" BETWEEN 2013-01-01 AND 2013-05-23

3 个答案:

答案 0 :(得分:4)

您可以使用嵌套的SUBSTRING_INDEX调用提取日期值(假设它始终由"date";s:10设置)。内部的一个返回"date";s:10"之后的所有内容,外部一个切断结束引用以及后面的内容:

SUBSTRING_INDEX(SUBSTRING_INDEX(val, '"date";s:10:"', -1), '"', 1)

如果您的示例中vala:3:{s:4:"test";b:1;s:2:"se";i:1;s:4:"date";s:10:"2013-05-23";},则会返回2013-05-23。然后您的查询可以是:

...
WHERE SUBSTRING_INDEX(SUBSTRING_INDEX(val, '"date";s:10:"', -1), '"', 1) BETWEEN 2013-01-01 AND 2013-05-23

不漂亮,但我们在这里不能指望:)

答案 1 :(得分:0)

我认为你应该用子字符串获取日期,起始字符为-13(右侧为13),长度为10。

这样的事情:

SUBSTR(field_name, -13, 10)

答案 2 :(得分:0)

从postmeta中选择*,其中meta_key ='your_meta_key'和meta_value REGEXP('6')