MySQL 支持 、 和 值的小数秒
TIME
,
DATETIME
精度
TIMESTAMP
可达微秒(6 位):
要定义包含小数秒部分的列,请使用语法 ,其中is 、 或 ,并且 是小数秒精度。例如:
type_name
(fsp
)type_name
TIME
DATETIME
TIMESTAMP
fsp
CREATE TABLE t1 (t TIME(3), dt DATETIME(6));
该
fsp
值(如果给定)必须在 0 到 6 的范围内。值 0 表示没有小数部分。如果省略,则默认精度为 0。(这与标准 SQL 默认值 6 不同,以与以前的 MySQL 版本兼容。)TIME
将带有小数秒部分的、DATE
或 值 插入TIMESTAMP
相同类型但小数位数较少的列中会导致四舍五入。考虑如下创建和填充的表: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 标准。
要插入带有截断的值,请启用
TIME_TRUNCATE_FRACTIONAL
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 | +-------------+------------------------+------------------------+
采用时间参数的函数接受带有小数秒的值。时间函数的返回值包括适当的小数秒。例如,
NOW()
不带参数返回不带小数部分的当前日期和时间,但采用从 0 到 6 的可选参数来指定返回值包括那么多数字中的小数秒部分。时间文字的语法产生时间值: 、 、 和,以及 ODBC 语法等价物。如果指定,结果值包括尾随的小数秒部分。以前,时间类型关键字被忽略,这些构造产生字符串值。请参阅 标准 SQL 和 ODBC 日期和时间文字
DATE '
str
'TIME '
str
'TIMESTAMP '
str
'