在 MySQL 中处理日期和时间(一)
第一章节:DATE、TIME 和 DATETIME 类型
绝大多数数据库存储了大量的“时态”数据。时态数据只是表示时间状态的简单数据。一个组织可能出于各种原因收集时态数据,例如分析天气模式和其他环境变量、监控交通状况、研究人口趋势等。企业还经常需要存储有关何时下订单、何时补货、何时雇用员工,以及有关其日常业务的大量其他信息。
你可能会感到很惊讶,关系数据库不会以相同的方式存储日期和时间。MySQL 尤其具有规范性。例如,它使用通用 yyyy-mm-dd 格式存储日期值。此格式是固定的,不可更改。就算你更喜欢使用 mm-dd-yyyy 格式,也不可能这样做。但是,你可以使用 DATE_FORMAT 函数在表示层(通常是应用程序)中按照你想要的方式格式化日期。在“在 MySQL 中处理日期和时间”的前两部分中,我们将从 DATE、TIME 和 DATETIME 开始研究 MySQL 的时态数据类型。
类型一览
MySQL 提供了五种用于存储日期和时间的类型,一些仅用于日期,另一些用于时间,还有一些包含两者。下表总结了每种类型:
本文的其余部分将更详细地介绍 DATE、TIME 和 DATETIME 类型,而下一篇文章将重点介绍另外两种类型。
DATE 类型
MySQL 使用 3 个字节来存储 DATE 值。DATE 值的范围是从 1000-01-01 到 9999-12-31。此外,当禁用严格模式(Strict Mode)时,MySQL 会将任何无效日期(例如 2015-02-30)转换为零日期值 0000-00-00。
在 Navicat 客户端的表设计器中,你可以从“类型”下拉列表中选择 DATE 类型:
若要设置 DATE 值,你可以使用日历控件简单地选择日期:
当然,你也可以使用 INSERT 语句插入 DATE:
TIME 类型
MySQL 使用“HH:MM:SS”格式来查询和显示表示一天中 24 小时内某个时间的时间值。当表示两个事件之间的时间间隔时,MySQL 使用大于 24 小时的“HHH:MM:SS”格式。
以下是 Navicat 表设计“类型”下拉列表中的 TIME 类型:
Navicat 提供了 TIME INPUT 控件设置 TIME 值:
以下是一个设置开始和结束时间的 INSERT 语句:
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 值使用 8 个字节进行存储。此外,DATETIME 值可以包含一个尾随小数秒,最细可以到微秒,格式为 YYYY-MM-DD HH:MM:SS[.fraction],例如 2015-12-20 10:01:00.999999。
对于输入 DATETIME 值,Navicat 提供了 DATETIME INPUT 控件,它结合了 DATE 和 TIME 控件:
DATETIME 值可以使用包含“T”时间部分描述符的字符串文字或通过转换为 DATETIME 来设置:
预告
在探讨了 DATE、TIME 和 DATETIME 类型之后,下一部分将介绍剩余的两种时间类型:TIMESTAMP 和 YEAR。
推荐阅读
(点击标题可跳转阅读)