# 11.2.1 日期和时间数据类型语法
表示时间值的日期和时间数据类型是日期
,时间
,约会时间
,时间戳
, 和年
.
为了日期
和约会时间
范围描述,“支持”意味着虽然早期的值可能有效,但不能保证。
MySQL 允许小数秒时间
,约会时间
, 和时间戳
值,精度高达微秒(6 位)。要定义包含小数秒部分的列,请使用语法*
类型名称*(*
fsp*)
哪里*输入你的名字
是时间
,约会时间
或时间戳
和fsp
*是小数秒的精度。例如:
CREATE TABLE t1 (t TIME(3), dt DATETIME(6), ts TIMESTAMP(0));
这个*fsp
*值(如果给定)必须在0到6之间。值为0表示没有小数部分。如果省略,默认精度为0。(为了与以前的MySQL版本兼容,这与标准SQL默认值6不同。)
任何时间戳
或约会时间
表中的列可以自动初始化和更新属性;看见第11.2.5节,“时间戳和日期时间的自动初始化和更新”.
-
约会。支持的范围是
'1000-01-01'
到'9999-12-31'
.MySQL显示日期
价值观'*
YYYY-MM-DD*'
格式,但允许将值分配给日期
使用字符串或数字的列。 -
日期和时间的组合。支持的范围是
'1000-01-01 00:00:00.000000'
到'9999-12-31 23:59:59.999999'
.MySQL显示约会时间
价值观'*
YYYY-MM-DD hh:mm:ss*[.*
小部分*]'
格式,但允许将值分配给约会时间
使用字符串或数字的列。可选的*
fsp
*可给出0到6范围内的值,以指定分数秒精度。值为0表示没有小数部分。如果省略,默认精度为0。自动初始化并更新到的当前日期和时间
约会时间
可以使用违约
和更新
列定义子句,如中所述第11.2.5节,“时间戳和日期时间的自动初始化和更新”. -
时间戳。范围是
'1970-01-01 00:00:01.000000'
UTC至'2038-01-19 03:14:07.999999'
UTC。时间戳
值存储为自历元起的秒数('1970-01-01 00:00:00'
UTC)。A.时间戳
无法表示该值'1970-01-01 00:00:00'
因为这相当于从纪元开始的0秒,值0保留用于表示'0000-00-00 00:00:00'
“零”时间戳
价值可选的*
fsp
*可给出0到6范围内的值,以指定分数秒精度。值为0表示没有小数部分。如果省略,默认精度为0。服务器处理的方式
时间戳
定义取决于时间戳的显式默认值
系统变量(参见第5.1.8节“服务器系统变量”).如果
时间戳的显式默认值
如果启用,则不会自动分配默认当前时间戳
或更新当前时间戳时
归因于任何时间戳
柱它们必须明确包含在列定义中。还有,有吗时间戳
未明确声明为非空
许可证无效的
价值观如果
时间戳的显式默认值
如果禁用,服务器将处理时间戳
详情如下:除非另有规定,否则
时间戳
表中的列定义为,如果未明确指定值,则会自动设置为最近一次修改的日期和时间。这使得时间戳
用于记录数据的时间戳插入
或使现代化
活动你也可以设置任何时间戳
通过为当前日期和时间指定无效的
值,除非已使用无效的
属性允许无效的
价值观可以使用指定自动初始化和更新到当前日期和时间
默认当前时间戳
和更新当前时间戳时
列定义子句。默认情况下,第一个时间戳
如前所述,列具有这些属性。然而,任何时间戳
表中的列可以定义为具有这些属性。 -
一段时间。范围是
'-838:59:59.000000'
到'838:59:59.000000'
.MySQL显示时间
价值观'*
hh:mm:ss*[.*
小部分*]'
格式,但允许将值分配给时间
使用字符串或数字的列。可选的*
fsp
*可给出0到6范围内的值,以指定分数秒精度。值为0表示没有小数部分。如果省略,默认精度为0。 -
4位数格式的一年。MySQL显示
年
价值观*YYYY
*格式,但允许将值分配给年
使用字符串或数字的列。值显示为1901
到2155
或0000
.有关
年
输入值的显示格式和解释,请参阅第11.2.4节“年份类型”.笔记
从MySQL 8.0.19开始
第(4)年
不推荐使用显式显示宽度的数据类型;您应该期望在MySQL的未来版本中删除对它的支持。相反,使用年
没有显示宽度,这具有相同的含义。MySQL 8.0不支持2位数字
第(2)年
旧版本MySQL中允许的数据类型。有关转换为4位数字的说明年
看见2位数年份(2)限制和迁移到4位数年份 (opens new window)在里面MySQL 5.7参考手册 (opens new window).这个
SUM()
和平均值()
聚合函数不适用于时间值。(它们将值转换为数字,在第一个非数字字符之后丢失所有内容。)要解决此问题,请转换为数字单位,执行聚合操作,然后转换回时间值。例如:
SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(time_col))) FROM tbl_name;
SELECT FROM_DAYS(SUM(TO_DAYS(date_col))) FROM tbl_name;