时间值的小数秒
MySQL对TIME
,DATETIME
和TIMESTAMP
值支持小数秒,精度最高为微秒(6位数):
要定义包含分数秒部分的列,使用语法,其中是,,或,并且是分数秒精度。例如:
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 fractestVALUES ('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'