10bet网址
MySQL 5.7参考手册
相关的文档10bet官方网站 本手册下载 本手册摘录

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

表示时间值的日期和时间数据类型是日期,时间,DATETIME,时间戳,一年

日期DATETIME范围描述,支持这意味着虽然早期的价值可能有效,但不能保证。

MySQL允许小数秒时间,DATETIME,时间戳值,精度最高可达微秒(6位数字)。若要定义包含小数秒部分的列,请使用以下语法type_name(fsp),在那里type_name时间,DATETIME,或时间戳,fsp是小数秒精度。例如:

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

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

任何时间戳DATETIME表中的列可以有自动初始化和更新属性;看到章节11.2.6,“TIMESTAMP和DATETIME的自动初始化和更新”

  • 日期

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

  • DATETIME [(fsp)]

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

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

    自动初始化并更新到当前日期和时间DATETIME可以使用默认的在更新列定义子句,如章节11.2.6,“TIMESTAMP和DATETIME的自动初始化和更新”

  • 时间戳((fsp)]

    一个时间戳。范围是“1970-01-01 00:00:01.000000”UTC,“2038-01-19 03:14:07.999999”UTC。时间戳值存储为自纪元(“1970-01-01”就是UTC)。一个时间戳不能表示该值“1970-01-01”就是因为这相当于从纪元开始的0秒,值0保留用于表示“0000-00-00”就是,时间戳价值。

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

    服务器处理的方式时间戳类的值决定了定义explicit_defaults_for_timestamp系统变量(见第5.1.7节,“服务器系统变量”)。

    如果explicit_defaults_for_timestamp是否启用,没有自动分配默认CURRENT_TIMESTAMP在更新CURRENT_TIMESTAMP任何属性时间戳列。它们必须显式包含在列定义中。此外,任何时间戳未显式声明为非空许可证值。

    如果explicit_defaults_for_timestamp禁用,服务器处理时间戳如下:

    除非另有说明,第一个时间戳表中的列被定义为如果没有显式地指定值,则自动设置为最近修改的日期和时间。这使得时间戳用于记录时间戳插入更新操作。你也可以设置任何时间戳将当前日期和时间指定为值,除非已用属性允许值。

    可以使用指定自动初始化和更新到当前日期和时间默认CURRENT_TIMESTAMP在更新CURRENT_TIMESTAMP列定义条款。默认为第一个时间戳列具有这些属性,如前所述。然而,任何时间戳表中的列可以定义为具有这些属性。

  • 时间((fsp)]

    一段时间。范围是“838:59:59.000000”“838:59:59.000000”。MySQL显示时间hh: mm: ss(。分数]“格式,但是允许将值赋给时间使用字符串或数字的列。

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

  • 年((4))

    4位数字格式的一年。MySQL显示一年YYYY格式,但是允许将值赋给一年使用字符串或数字的列。值显示为19012155,或0000

    请注意

    (2)data type已被弃用,MySQL 5.7.5中已移除对它的支持。将便是(2)列4位一年列,看到第11.2.5节,“两位数年份(2)的限制和向四位数年份迁移”

    有关一年显示格式和输入值的解释,请参阅第11.2.4节,“年份类型”

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

选择SEC_TO_TIME(总和(TIME_TO_SEC (time_col)))tbl_name;选择FROM_DAYS(总和(TO_DAYS (date_col)))tbl_name;
请注意

MySQL服务器可以使用MAXDB启用SQL模式。在这种情况下,时间戳是相同的,DATETIME。如果在创建表时启用了这种模式,时间戳列被创建为DATETIME列。因此,这样的列使用DATETIME显示格式,具有相同范围的值,并且没有自动初始化或更新到当前日期和时间。看到第5.1.10节,“服务器SQL模式”

请注意

从MySQL 5.7.22起,MAXDB弃用;我们希望在MySQL的未来版本中移除它。