Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Date and Time Data Type Syntax

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(与标准 SQL 的默认值 6 不同,以保持向下兼容性)。

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

  • DATE

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

  • DATETIME[(fsp)]

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

    可以指定一个可选的 fsp 值,范围从 0 到 6,以指定小数秒精度。值为 0 表示没有小数部分。如果省略,默认精度是 0。

    可以使用DATETIME 列的 DEFAULTON UPDATE 列定义子句指定自动初始化和更新到当前日期和时间,详见第13.2.5节,“TIMESTAMP 和 DATETIME 自动初始化和更新”

  • TIMESTAMP[(fsp)]

    时间戳。范围是 '1970-01-01 00:00:01.000000' UTC 到 '2038-01-19 03:14:07.499999' UTC。TIMESTAMP 值以自(epoch)秒数存储('1970-01-01 00:00:00' UTC)。一个 TIMESTAMP 无法表示值 '1970-01-01 00:00:00',因为这等同于自(epoch)秒数为0,且值0保留用于表示 '0000-00-00 00:00:00',零 TIMESTAMP 值。

    可以指定一个可选的 fsp 值,范围从0到6,以指定小数秒精度。值为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对记录插入或更新操作的时间戳非常有用。你也可以将任何TIMESTAMP列设置为当前日期和时间,除非该列已经定义了允许空值的属性。

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

  • TIME[(fsp)]

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

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

  • YEAR[(4)]

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

    关于YEAR显示格式和输入值解释,见第13.2.4节,“The YEAR 类型”

    Note

    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;