小编典典

MySQL与date_format的日期比较

mysql

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

        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”。有什么建议吗?提前致谢。


阅读 1516

收藏
2020-05-17

共1个答案

小编典典

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

相反,您应该将日期 作为date 进行比较,然后仅将其转换为目标格式以进行输出。

尝试这个:

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';

(请注意,格式化日期d-m-Y开头是不寻常的-通常最好使用y-M-dISO-8601标准等格式。但是,上面的代码可以完成您在问题中所要求的工作。)

2020-05-17