文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  日期和时间数据类型语法

13.2.1 日期和时间数据类型语法

用于表示时间值的日期和时间数据类型为 DATETIMEDATETIMETIMESTAMPYEAR

对于 DATEDATETIME 范围描述,“支持”意味着虽然早期值可能有效,但没有保证。

MySQL 允许 TIMEDATETIMETIMESTAMP 值使用小数秒,精度最高可达微秒(6 位)。要定义包含小数秒部分的列,请使用语法 type_name(fsp),其中 type_nameTIMEDATETIMETIMESTAMP,而 fsp 是小数秒精度。例如

CREATE TABLE t1 (t TIME(3), dt DATETIME(6), ts TIMESTAMP(0));

如果给出,则 fsp 值必须在 0 到 6 的范围内。值为 0 表示没有小数部分。如果省略,则默认精度为 0。(这与标准 SQL 的默认值 6 不同,为了与以前的 MySQL 版本兼容。)

任何表中的 TIMESTAMPDATETIME 列都可以具有自动初始化和更新属性;请参见 第 13.2.5 节,“TIMESTAMP 和 DATETIME 的自动初始化和更新”

  • DATE

    日期。支持的范围是 '1000-01-01''9999-12-31'。MySQL 以 'YYYY-MM-DD' 格式显示 DATE 值,但允许使用字符串或数字为 DATE 列分配值。

  • DATETIME[(fsp)]

    日期和时间组合。支持的范围是 '1000-01-01 00:00:00.000000''9999-12-31 23:59:59.499999'。MySQL 以 'YYYY-MM-DD hh:mm:ss[.fraction]' 格式显示 DATETIME 值,但允许使用字符串或数字为 DATETIME 列分配值。

    可以在 0 到 6 的范围内给出可选的 fsp 值,以指定小数秒精度。值为 0 表示没有小数部分。如果省略,则默认精度为 0。

    可以使用 DEFAULTON UPDATE 列定义子句指定 DATETIME 列的自动初始化和更新,如 第 13.2.5 节,“TIMESTAMP 和 DATETIME 的自动初始化和更新” 中所述。

  • TIMESTAMP[(fsp)]

    时间戳。范围是 '1970-01-01 00:00:01.000000' UTC 到 '2038-01-19 03:14:07.499999' UTC。TIMESTAMP 值存储为自纪元('1970-01-01 00:00:00' UTC)以来的秒数。一个 TIMESTAMP 无法表示值 '1970-01-01 00:00:00',因为这等效于纪元以来的 0 秒,而值 0 用于表示 '0000-00-00 00:00:00',即“零”TIMESTAMP 值。

    可以在 0 到 6 的范围内给出可选的 fsp 值,以指定小数秒精度。值为 0 表示没有小数部分。如果省略,则默认精度为 0。

    服务器处理 TIMESTAMP 定义的方式取决于 explicit_defaults_for_timestamp 系统变量的值(请参见 第 7.1.8 节,“服务器系统变量”)。

    如果启用了 explicit_defaults_for_timestamp,则不会自动将 DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP 属性分配给任何 TIMESTAMP 列。它们必须在列定义中显式包含。此外,任何未显式声明为 NOT NULLTIMESTAMP 都允许 NULL 值。

    如果禁用了 explicit_defaults_for_timestamp,则服务器按如下方式处理 TIMESTAMP

    除非另有说明,否则表中的第一个 TIMESTAMP 列被定义为自动设置为最近修改的日期和时间,除非显式分配值。这使得 TIMESTAMP 对于记录 INSERTUPDATE 操作的时间戳很有用。您还可以通过为任何 TIMESTAMP 列分配 NULL 值来将其设置为当前日期和时间,除非它已定义了 NULL 属性以允许 NULL 值。

    可以使用 DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP 列定义子句指定自动初始化和更新为当前日期和时间。默认情况下,第一个 TIMESTAMP 列具有这些属性,如前所述。但是,表中的任何 TIMESTAMP 列都可以定义为具有这些属性。

  • TIME[(fsp)]

    时间。范围为 '-838:59:59.000000''838:59:59.000000'。MySQL 以 'hh:mm:ss[.fraction]' 格式显示 TIME 值,但允许使用字符串或数字将值分配给 TIME 列。

    可以在 0 到 6 的范围内给出可选的 fsp 值,以指定小数秒精度。值为 0 表示没有小数部分。如果省略,则默认精度为 0。

  • YEAR[(4)]

    4 位格式的年份。MySQL 以 YYYY 格式显示 YEAR 值,但允许使用字符串或数字将值分配给 YEAR 列。值显示为 19012155,或 0000

    有关 YEAR 显示格式和输入值解释的更多信息,请参见 第 13.2.4 节“YEAR 类型”

    注意

    具有显式显示宽度的 YEAR(4) 数据类型已弃用;您应该预期它将在 MySQL 的未来版本中被移除。相反,请使用不带显示宽度的 YEAR,它具有相同的含义。

SUM()AVG() 聚合函数不适用于时间值。(它们将值转换为数字,丢失第一个非数字字符之后的所有内容。)要解决此问题,请转换为数字单位,执行聚合操作,然后转换回时间值。示例

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(time_col))) FROM tbl_name;
SELECT FROM_DAYS(SUM(TO_DAYS(date_col))) FROM tbl_name;