检查英国日期是否在SQL中的两个日期之间

时间:2012-05-11 13:42:52

标签: php mysql date

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

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

任何想法,如果这是可能的,或者我正在看两个查询(抓住所有帖子通过检查PHP中的数据获取我真正想要的ID)?感谢。

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您可以使用以下结构:

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

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

依赖于上面提供的过滤器的查询将起作用,但由于无法通过索引优化此类范围查找,因此效率不高。

答案 2 :(得分: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)

答案 3 :(得分: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."'