0

我需要postmeta.event_date使用 SLQ 格式检查以 dd/mm/yyyy 格式在数据库表 () 中存储为字符串的英国日期是否介于两个日期之间BETWEEN 'yyyy-mm-dd' AND 'yyyy-mm-dd+28'。我可以确定要检查的日期,这是检查我是否遇到问题的日期,因为它的 SQL 格式错误。

我无法更改要检查的日期格式,因为它附加到帖子中,并且我不知道要从数据库中删除哪些帖子,直到我可以检查它们是否在我选择的日期之间...

有什么想法,如果这是可能的,或者我是否在查看两个查询(通过检查 PHP 中的数据来获取我真正想要的那些帖子的 ID)?谢谢。

4

4 回答 4

1

转换日期的方法是使用str_to_date

STR_TO_DATE(event_date, '%d/%m/%Y')

这会将您的日期转换为您可以在BETWEEN公式中使用的日期。

http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_str-to-date

于 2012-05-11T13:49:49.810 回答
1

您可以使用以下构造:

STR_TO_DATE(postmeta.event_date, '%d/%m/%Y') 在 'yyyy-mm-dd' 和 'yyyy-mm-dd' 之间 + 间隔 28 天

但是,在可用于过滤的列中使用数据库本身不支持的自定义日期格式通常是一种糟糕的设计,除非人们可能确切地知道他们在做什么。

依赖于上面提供的过滤器的查询将起作用,但它不会非常有效,因为这种范围查找无法通过索引进行优化。

于 2012-05-11T14:03:44.537 回答
0

怎么样

WHERE event_date BETWEEN 'yyyy-mm-dd' AND DATE_ADD('yyyy-mm-dd', INTERVAL 28 DAY)

显然,yyyy-mm-dd将替换为实际值:

WHERE event_date BETWEEN '2011-05-11' AND DATE_ADD('2011-05-11', INTERVAL 28 DAY)

如果您的日期字符串不是预期的格式,您必须先解析它。您可以在 PHP 中执行此操作或使用STR_TO_DATE.

WHERE event_date 
BETWEEN 
    STR_TO_DATE('01/05/2011','%d/%m/%Y') AND
    DATE_ADD(STR_TO_DATE('01/05/2011','%d/%m/%Y'), INTERVAL 28 DAY)
于 2012-05-11T13:45:31.183 回答
0

这是从今天到接下来的 28 天的时间段

  $now = mktime();
  //set your period date
  $from = mktime(0, 0, 0, date("m",$now), date("d",$now), date("Y",$now));
  $to   = mktime(23, 59, 59, date("m",$now), date("d",$now)+28, date("Y",$now));

这是您的查询

 SELECT * FROM `postmeta` WHERE UNIX_TIMESTAMP(`event_date`)>='".$from."' AND UNIX_TIMESTAMP(`event_date`)<='".$to."'
于 2012-05-11T13:49:10.240 回答