与DATE_FORMAT MySQL的日期比较(mysql date comparison with

2019-06-21 06:35发布

我一派,尝试了几种方法来比较日期,但如预期遗憾的是没有得到结果。 我有像以下记录当前的状态:

        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' 。 任何建议? 提前致谢。

Answer 1:

您的格式根本不是什么排序一个开始-你是比较字符串 ,字符串“28-10-2012” “2012年2月11日”更大。

相反,你应该比较日期日期 ,然后只将它们转换成你的目标格式输出。

试试这个:

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

(输入必须始终年-月-值的形式,按照文档 )。

请注意,如果starttimeDATETIME场,你可能要考虑更改查询,以避免反复转换。 (优化可能是足够的,以避免它聪明,但它是值得一试。)

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

(请注意,这是不寻常的格式化日期为dmY与启动-这将是更好地使用yMd在一般情况下,作为ISO-8601标准等。但是,上面的代码做你问对的问题。)



Answer 2:

使用2012年11月2日,而不是2012年2月11日,你将不再需要DATE_FORMAT()了



Answer 3:

使用下面的方法:

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 */

我会帮你的!



文章来源: mysql date comparison with date_format