Navicat 博客

在 MySQL 中处理日期和时间 - 第 4 部分 2022 年 3 月 22 日,由 Robert Gravelle 撰寫

创建日期或时间

在这个关于日期和时间的系列中,我们探索了 MySQL 的五种时态数据类型,以及它的许多面向日期或时间的函数中的一些。在本文中,我们将介绍在 MySQL 中创建日期和时间的几种方法。

使用 MAKEDATE() 函式

第 3 部分中,我们简要介绍了 MAKEDATE() 函数。它接受 yeardayofyear,并返回生成的日期值。例如,MAKEDATE(2021, 200) 将返回“2021-07-19”的日期。这个函数的缺点应该很明显;如果你有 year、month 和 day,则需要进行一些计算来确定 dayofyear。在这种情况下,你可以通过将 MAKEDATE() 与 DATE_ADD() 组合来创建 DATE。day 为 1 的 MAKEDATE() 将为返回给定年份的第一天的 DATE,然后你可以使用 DATE_ADD() 添加月份和日期。这是一个仅设置 year 和 month 的示例:

makedate_and_date_add (35K)

此 SELECT 语句也包括日期:

makedate_and_date_add_with_day (44K)

MAKETIME() 函数

如果你只想创建一个 TIME,则 MAKETIME() 返回一个根据小时、分钟和秒参数计算的时间值:

maketime (27K)

第二个参数可以有毫秒的小数部分:

maketime_with_fractions (25K)

STR_TO_DATE() 函数

创建 DATE、TIME 或 DATETIME 的另一个选项是使用 STR_TO_DATE() 函数。它接受一个日期字符串和一个格式字符串并返回:

  • 如果字符串仅包含日期,则为 DATE 值
  • 如果字符串仅包含时间,则为 TIME 值
  • 如果格式字符串包含日期和时间部分,则为 DATETIME 值

此外,如果从 str 中提取的日期、时间或日期时间值无效,则 STR_TO_DATE() 返回 NULL 并产生警告。

一些例子

以下是 Navicat for MySQL 16中的几个日期:

str_to_date (47K)

扫描从 str 的开头开始,如果发现格式不匹配,则扫描失败。同时,忽略 str 末尾的额外字符:

str_to_date_times (57K)

未指定的日期或时间部分的值为 0,因此日期或时间字符串中未完全指定的值会产生部分或全部部分设置为 0 的结果:

str_to_date_times_with_missing_parts (46K)

有关可以在格式中使用的说明符的完整列表,请参阅 MySQL 官方文档中的 DATE_FORMAT() 函数描述

组合 MAKEDATE()、MAKETIME() 和 STR_TO_DATE() 函数

如果我们有两个单独的 DATE 和 TIME 值,我们可以连接 MAKEDATE() 和 MAKETIME() 的结果然后将组合字符串传递给 STR_TO_DATE() 来获得 DATETIME 值。虽然这听起来可能需要做很多工作,但实际上非常简单:

str_to_date_datetime (49K)

总结

在“在 MySQL 中处理日期和时间”的这一部分中,我们介绍了使用 MySQL 的一些专用日期和时间函数在 MySQL 中创建日期和时间的几种方法。在下一部分中,我们将了解如何在 SELECT 查询中使用时态数据。

Navicat 文章
频道条目
分享
文章归档