2

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

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

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

有没有办法在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
4

3 回答 3

4

"date";s:10您可以使用嵌套SUBSTRING_INDEX调用提取日期值(假设它始终由 设置)。内部的返回之后"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

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

于 2013-05-23T17:59:19.270 回答
0

select * from postmeta where meta_key = 'your_meta_key' and meta_value REGEXP ('6')

于 2014-11-24T08:02:07.413 回答
0

我认为你应该得到带有起始字符-13(右侧13)和长度为10的子字符串的日期。

像这样的东西:

SUBSTR(field_name, -13, 10)
于 2013-05-23T17:52:47.640 回答