日期和时间数据类型语法
日期和时间数据类型用于表示时间值DATE
,TIME
,DATETIME
,TIMESTAMP
,和YEAR
。
对于DATE
和DATETIME
范围描述,“ supported ”表示尽管较早的值可能有效,但不能保证。
MySQL允许对TIME
,DATETIME
和TIMESTAMP
值使用小数秒,精度最高为微秒(6位数)。要定义包含分数秒部分的列,使用语法,其中是,,或,并且是分数秒精度。例如:type_name(fsp)
type_name
TIME
DATETIME
TIMESTAMP
fsp
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'
DATE
DATETIME[(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;