这不是我的代码,我需要在不修改表结构的情况下完成它。我知道将日期存储为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
答案 0 :(得分:4)
您可以使用嵌套的SUBSTRING_INDEX
调用提取日期值(假设它始终由"date";s:10
设置)。内部的一个返回"date";s:10"
之后的所有内容,外部一个切断结束引用以及后面的内容:
SUBSTRING_INDEX(SUBSTRING_INDEX(val, '"date";s:10:"', -1), '"', 1)
如果您的示例中val
为a: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')