• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 时间值的小数秒

    MySQL对TIMEDATETIMETIMESTAMP值支持小数秒,精度最高为微秒(6位数):

    • 要定义包含分数秒部分的列,使用语法,其中是,,或,并且是分数秒精度。例如:type_name(fsp)type_nameTIMEDATETIMETIMESTAMPfsp

      CREATE TABLE t1 (t TIME(3), dt DATETIME(6));
      

      fsp如果给出值,则该值必须在0到6的范围内。值0表示没有小数部分。如果省略,则默认精度为0。(这与标准SQL默认值6不同,以便与以前的MySQL版本兼容。)

    • 插入TIMEDATETIMESTAMP具有小数部分秒值到相同类型的一列,但在舍入具有较少的小数位的结果。考虑如下创建和填充的表:

      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'