我用谷歌搜索并尝试了几种方法来比较日期,但不幸的是没有得到预期的结果。我的当前记录状态如下:
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”。有什么建议吗?提前致谢。
您的格式从根本上来说不是一种可排序的格式 - 您正在比较strings,以及字符串“28-10-2012”is大于“02-11-2012”。
相反,您应该比较日期as dates,然后仅将它们转换为目标格式以进行输出。
尝试这个:
select date_format(date(starttime),'%d-%m-%Y') from data
where date(starttime) >= date '2012-11-02';
(输入必须始终采用年-月-值形式,根据文档 http://dev.mysql.com/doc/refman/5.5/en/date-and-time-literals.html.)
请注意,如果starttime
is a DATETIME
字段,您可能需要考虑更改查询以避免重复转换。 (优化器很可能足够聪明,可以避免这种情况,但值得检查。)
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 标准等。但是,上面的代码满足了您在问题中的要求。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)