当前位置: 首页 > 面试题库 >

MySQL与date_format的日期比较

东明德
2023-03-14
问题内容

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

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


问题答案:

您的格式根本不是什么排序一个开始-你是比较 字符串 ,字符串“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标准等格式。但是,上面的代码可以完成您在问题中所要求的工作。)



 类似资料:
  • Parameter Position Type Required Default Description 1 string No %b %e, %Y This is the format for the outputted date. 输出日期的格式。 2 string No n/a This is the default date if the input is empty. 输入为空时的默认时

  • 本文向大家介绍MySql用DATE_FORMAT截取DateTime字段的日期值,包括了MySql用DATE_FORMAT截取DateTime字段的日期值的使用技巧和注意事项,需要的朋友参考一下 用 DATE_FORMAT 来格式化日期字段

  • 问题内容: 我想比较数据库中2个给定日期之间的日期。数据库中的列是DATETIME,我只想将其与日期格式进行比较,而不要与datetime格式进行比较。 执行上面的SQL时出现此错误: 您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册,以在’us_reg_date,120)> =‘2000-07-05’AND CONVERT(CHAR(10),us_reg_date,120)<=‘2

  • 本文向大家介绍在MySQL中使用DATE_FORMAT()和STR_TO_DATE()格式化日期,包括了在MySQL中使用DATE_FORMAT()和STR_TO_DATE()格式化日期的使用技巧和注意事项,需要的朋友参考一下 让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 以下是格式化日期的查询- 让我们使用select语句

  • 问题内容: 在SQL语句中,如何比较保存为TIMESTAMP的日期和YYYY-MM-DD格式的日期? 例如: 我希望此查询返回指定日期中所有带有时间戳的行,但它仅返回具有午夜时间戳的行。 谢谢 问题答案: 您可以使用该函数提取时间戳记的日期部分: 但是,如果您在timestamp列上有索引,则这样做会更快,因为它可以利用索引:

  • 我在mysql数据库表中有购买数据。服务器上的所有数据都存储在UTC时区中。 我可以用下面的代码转换EST时区的日期时间。 我正在使用下面的代码获取当天的最后一个星期六和下一个星期六。 但如何将上述EST时区转换的日期时间与UTC时区中存储的mysql数据进行比较?当我在下面查询时,我需要转换EST时区中“purchasedatetime”字段的数据。这可能吗?还是我做得不对?请告知。