日期和时间数据类型语法
日期和时间数据类型用于表示时间值DATE,TIME,DATETIME,TIMESTAMP,和YEAR。
对于DATE和DATETIME范围描述,“ supported ”表示尽管较早的值可能有效,但不能保证。
MySQL允许对TIME,DATETIME和TIMESTAMP值使用小数秒,精度最高为微秒(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版本兼容。)
任何TIMESTAMP或DATETIME表中的列可以具有自动初始化和更新属性;请参见“ TIMESTAMP和DATETIME的自动初始化和更新”。
DATE一个约会。支持的范围是
'1000-01-01'到'9999-12-31'。MySQLDATE以格式显示值,但允许使用字符串或数字将值分配给列。'YYYY-MM-DD'DATEDATETIME[(fsp)]日期和时间组合。支持的范围是
'1000-01-01 00:00:00.000000'到'9999-12-31 23:59:59.999999'。MySQLDATETIME以格式显示值,但允许使用字符串或数字将值分配给列。'YYYY-MM-DD hh:mm:ss[.fraction]'DATETIME可以
fsp指定一个介于0到6之间的可选值,以指定小数秒精度。值为0表示没有小数部分。如果省略,则默认精度为0。DATETIME可以使用DEFAULT和ON UPDATE列定义子句指定自动初始化和更新到列的当前日期和时间,如“ TIMESTAMP和DATETIME的自动初始化和更新”中所述。TIMESTAMP[(fsp)]时间戳记。范围是
'1970-01-01 00:00:01.000000'UTC到'2038-01-19 03:14:07.999999'UTC。TIMESTAMP值存储为自纪元('1970-01-01 00:00:00'UTC)以来的秒数。甲TIMESTAMP不能代表值'1970-01-01 00:00:00',因为这是等同于从所述历元和值00秒被保留用于表示'0000-00-00 00:00:00',该“零”TIMESTAMP值。可以
fsp指定一个介于0到6之间的可选值,以指定小数秒精度。值为0表示没有小数部分。如果省略,则默认精度为0。服务器处理
TIMESTAMP定义的方式取决于explicit_defaults_for_timestamp系统变量的值(请参见“服务器系统变量”)。如果
explicit_defaults_for_timestamp启用,则不会自动将DEFAULT CURRENT_TIMESTAMP或ON UPDATE CURRENT_TIMESTAMP属性分配给任何TIMESTAMP列。它们必须明确包含在列定义中。同样,任何TIMESTAMP未明确声明为NOT NULL允许NULL值的值。如果
explicit_defaults_for_timestamp被禁用,则服务器处理TIMESTAMP如下:除非另有说明,否则
TIMESTAMP如果未明确分配值,则表中的第一列被定义为自动设置为最近修改的日期和时间。这TIMESTAMP对于记录“INSERT或”UPDATE操作的时间戳很有用。您也可以TIMESTAMP通过为其分配NULL值来将任何列设置为当前日期和时间,除非已使用NULL允许NULL值的属性对其进行了定义。可以使用
DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP列定义子句指定自动初始化和更新到当前日期和时间。默认情况下,第一TIMESTAMP列具有这些属性,如前所述。但是,TIMESTAMP可以将表中的任何列定义为具有这些属性。TIME[(fsp)]一次范围是
'-838:59:59.000000'至'838:59:59.000000'。MySQLTIME以格式显示值,但允许使用字符串或数字将值分配给列。'hh:mm:ss[.fraction]'TIME可以
fsp指定一个介于0到6之间的可选值,以指定小数秒精度。值为0表示没有小数部分。如果省略,则默认精度为0。YEAR[(4)]一年的4位数格式。MySQL
YEAR以YYYY格式显示值,但允许YEAR使用字符串或数字将值分配给列。值显示为1901到2155或0000。有关
YEAR显示格式和输入值解释的更多信息,请参见“YEAR 类型”。注意
从MySQL 8.0.19开始,不建议
YEAR(4)使用具有显式显示宽度的数据类型,并且在将来的MySQL版本中将不再支持该数据类型。而是,使用YEAR不具有相同含义的显示宽度。MySQL 8.0不支持
YEAR(2)旧版本MySQL中允许的两位数数据类型。有关转换为4位的指令YEAR,请参见两位数年份(2)的限制和迁移到4位数年份中的MySQL 5.7参考手册。
在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;
