文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

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

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

对于 DATEDATETIME 范围描述,“支持”表示虽然更早的值可能有效,但没有保证。

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

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 操作的时间戳很有用。您还可以通过将 NULL 值分配给任何 TIMESTAMP 列将其设置为当前日期和时间,除非它已使用 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;