Navicat 博客

在 MySQL 中处理日期和时间 - 第 1 部分 2022 年 2 月 25 日,由 Robert Gravelle 撰写

DATE、TIME 和 DATETIME 类型

绝大多数数据库存储了大量的“时态”数据。时态数据只是表示时间状态的简单数据。一个组织可能出于各种原因收集时态数据,例如分析天气模式和其他环境变量、监控交通状况、研究人口趋势等。企业还经常需要存储有关何时下订单、何时补货、何时雇用员工,以及有关其日常业务的大量其他信息。

你可能会感到很惊讶,关系数据库不会以相同的方式存储日期和时间。MySQL 尤其具有规范性。例如,它使用通用 yyyy-mm-dd 格式存储日期值。此格式是固定的,不可更改。就算你更喜欢使用 mm-dd-yyyy 格式,也不可能这样做。但是,你可以使用 DATE_FORMAT 函数在表示层(通常是应用程序)中按照你想要的方式格式化日期。在“在 MySQL 中处理日期和时间”的前两部分中,我们将从 DATE、TIME 和 DATETIME 开始研究 MySQL 的时态数据类型。

类型一览

MySQL 提供了五种用于存储日期和时间的类型,一些仅用于日期,另一些用于时间,还有一些包含两者。下表总结了每种类型:

Type Name 描述
 DATE YYYY-MM-DD 格式的日期值
 TIME hh:mm:ss 格式的时间值
 DATETIME YYYY-MM-DD hh:mm:ss 格式的日期和时间值
 TIMESTAMP YYYY-MM-DD hh:mm:ss 格式的时间戳值
 YEAR YYYYYY 格式的年份值

本文的其余部分将更详细地介绍前三种类型,而下一篇文章将重点介绍另外两种类型。

DATE 类型

MySQL 使用 3 个字节来存储 DATE 值。DATE 值的范围是从 1000-01-01 到 9999-12-31。此外,当禁用严格模式(Strict Mode)时,MySQL 会将任何无效日期(例如 2015-02-30)转换为零日期值 0000-00-00。在 Navicat 16的表设计器中,你可以从“类型”下拉列表中选择 DATE 类型:

date_column_in_table_designer (159K)

若要设置 DATE 值,你可以使用日历控件简单地选择日期:

calendar (88K)

当然,你也可以使用 INSERT 语句插入 DATE:

insert_date (25K)

TIME 类型

MySQL 使用“HH:MM:SS”格式来查询和显示表示一天中 24 小时内某个时间的时间值。而表示两个事件之间的时间间隔,MySQL 使用大于 24 小时的“HHH:MM:SS”格式。

以下是 Navicat 16“类型”下拉列表中的 TIME 类型:

time_column_in_table_designer (79K)

Navicat 提供了 TIME INPUT 控件设置 TIME 值:

time_input_control (11K)

以下是一个设置开始和结束时间的 INSERT 语句:

insert_time (24K)

DATETIME 类型

很多时候,你需要同时存储日期和时间。为此,你可以使用 MySQL DATETIME 类型。默认情况下,DATETIME 值的范围是从 1000-01-01 00:00:00 到 9999-12-31 23:59:59。当你从 DATETIME 列查询数据时,MySQL 会以相同的 YYYY-MM-DD HH:MM:SS 格式显示 DATETIME 值。

DATETIME 值使用 5 个字节进行存储。此外,DATETIME 值可以包含一个尾随小数秒,最细可以到微秒,格式为 YYYY-MM-DD HH:MM:SS[.fraction],例如 2015-12-20 10:01:00.999999。

对于输入 DATETIME 值,Navicat 提供了 DATETIME INPUT 控件,它结合了 DATE 和 TIME 控件:

datetime_input_control (63K)

DATETIME 值可以使用包含“T”时间部分描述符的字符串文字或通过转换为 DATETIME 来设置:

insert_datetime (31K)

预告

在探讨了 DATE、TIME 和 DATETIME 类型之后,下一部分将介绍剩余的两种时间类型:TIMESTAMP 和 YEAR。

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