mysql与date_format的日期比较

时间:2012-11-22 07:22:34

标签: mysql date date-format

我用Google搜索并尝试了几种方法来比较日期,但遗憾的是没有按预期得到结果。我有如下记录的当前状态:

        mysql> select date_format(date(starttime),'%d-%m-%Y') from data;

              +-----------------------------------------+
              | date_format(date(starttime),'%d-%m-%Y') |
              +-----------------------------------------+
              | 28-10-2012                              |
              | 02-11-2012                              |
              | 02-11-2012                              |
              | 02-11-2012                              |
              | 03-11-2012                              |
              | 03-11-2012                              |
              | 07-11-2012                              |
              | 07-11-2012                              |

我想比较日期,因此这样做:

        mysql> select date_format(date(starttime),'%d-%m-%Y') from data where date_format(date(starttime),'%d-%m-%y') >= '02-11-2012';
               +-----------------------------------------+
               | date_format(date(starttime),'%d-%m-%Y') |
               +-----------------------------------------+
               | 28-10-2012                              |
               | 02-11-2012                              |
               | 02-11-2012                              |
               | 02-11-2012                              |
               | 03-11-2012                              |
               | 03-11-2012                              |
               | 07-11-2012                              |
               | 07-11-2012                              |

我认为结果不应该包括'28 -10-2012'。有什么建议吗?提前谢谢。

3 个答案:

答案 0 :(得分:39)

您的格式从根本上讲不是一个可排序的格式 - 您正在比较字符串,字符串“28-10-2012” 大于“02” -11-2012" 。

相反,您应该将日期比作日期,然后只将它们转换为目标格式以便输出。

试试这个:

select date_format(date(starttime),'%d-%m-%Y') from data
where date(starttime) >= date '2012-11-02';

(根据the documentation,输入必须始终为年 - 月 - 值形式。)

请注意,如果starttimeDATETIME字段,您可能需要考虑更改查询以避免重复转换。 (优化器可能足够智能以避免它,但值得检查。)

select date_format(date(starttime),'%d-%m-%Y') from data
where starttime >= '2012-11-02 00:00:00';

(请注意,将日期格式设置为d-m-Y并不常见 - 最好一般使用y-M-d,最好是ISO-8601标准等。但是,上面的代码确实如此你问的问题。)

答案 1 :(得分:2)

使用2012-11-02而不是02-11-2012,您将不再需要date_format()

答案 2 :(得分:0)

使用以下方法:

public function dateDiff ($date1, $date2) {
/* Return the number of days between the two dates: */
  return round(abs(strtotime($date1)-strtotime($date2))/86400);
}  
/* end function dateDiff */

这会有所帮助!