# 11.2.6时间值的小数秒
MySQL对时间
,约会时间
和时间戳
精度高达微秒(6位)的值:
要定义包含小数秒部分的列,请使用以下语法
*
输入你的名字*(*
fsp*)
哪里*输入你的名字
是时间
,约会时间
或时间戳
和fsp
*是小数秒的精度。例如:CREATE TABLE t1 (t TIME(3), dt DATETIME(6));
这个*
fsp
*值(如果给定)必须在0到6之间。值为0表示没有小数部分。如果省略,默认精度为0。(为了与以前的MySQL版本兼容,这与标准SQL默认值6不同。)插入
时间
,日期
或时间戳
在同一类型的列中包含小数秒部分但小数位数较少的值会导致舍入。考虑创建并填充的表如下:CREATE TABLE fractest( c1 TIME(2), c2 DATETIME(2), c3 TIMESTAMP(2) ); INSERT INTO fractest VALUES ('17:51:04.777', '2018-09-08 17:51:04.777', '2018-09-08 17:51:04.777');
时间值以舍入方式插入表格:
mysql> SELECT * FROM fractest; +-------------+------------------------+------------------------+ | c1 | c2 | c3 | +-------------+------------------------+------------------------+ | 17:51:04.78 | 2018-09-08 17:51:04.78 | 2018-09-08 17:51:04.78 | +-------------+------------------------+------------------------+
当这种舍入发生时,不会给出警告或错误。这种行为遵循SQL标准。
要插入带有截断的值,请启用
时间截短分数
SQL模式:SET @@sql_mode = sys.list_add(@@sql_mode, 'TIME_TRUNCATE_FRACTIONAL');
启用该SQL模式后,将使用截断插入时态值:
mysql> SELECT * FROM fractest; +-------------+------------------------+------------------------+ | c1 | c2 | c3 | +-------------+------------------------+------------------------+ | 17:51:04.77 | 2018-09-08 17:51:04.77 | 2018-09-08 17:51:04.77 | +-------------+------------------------+------------------------+
采用时态参数的函数接受带小数秒的值。时间函数的返回值包括小数秒(视情况而定)。例如
现在()
with no argument返回当前日期和时间,不带小数部分,但使用0到6之间的可选参数指定返回值包含该数字中的小数秒部分。时态文字的语法生成时态值:
日期'*
str*'
,时间到了*
str*'
和时间戳'*
str*'
,以及ODBC语法等价物。如果指定,结果值包括一个尾随的小数秒部分。以前,时态类型关键字被忽略,这些构造产生了字符串值。看见标准SQL和ODBC日期和时间文本