为什么MySql SUBDATE(now(3),2)函数在毫秒内添加额外的三位数?

时间:2018-04-15 07:49:09

标签: mysql mysql-workbench

set @currentdatetime:=now(3);
set @intervalStartDate:=subdate(@currentdatetime, 2);

select @currentdatetime, @intervalStartDate;

这些查询提供以下输出:

|   @currentdatetime        |      @intervalStartDate       | 
-------------------------------------------------------------
|2018-04-15 13:02:32.948    |    2018-04-13 13:02:32.948000 |

为什么在@intervalStartDate的末尾添加了三个额外的零?

如何删除这些?

2 个答案:

答案 0 :(得分:1)

1)为什么最后会添加三个额外的零?: -

每当在DATETIME参数中以毫秒(任何精度)调用SUBDATE()函数时,它将计算并以毫秒为单位分配最大精度限制的输出。(来自此问题的答案之一here

2)如何删除这些?

不是将now()的值存储在变量中并将其传递到subdate(),而是直接将now()传递给subdate() ,即替换

set @currentdatetime:=now(3);
set @intervalStartDate:=subdate(@currentdatetime, 2);

用这个

set @intervalStartDate:=subdate(now(3), 2);

但是如果你想先在变量中存储now()的值,那么删除尾随零的一种解决方法是mysql的trim

set @currentdatetime:=now(3);
set @intervalStartDate:=trim(trailing '0' from subdate(@currentdatetime, 2));

参见演示here

答案 1 :(得分:0)

NOW()函数的最大上限为小数点后6位。

SELECT NOW(6);

给出类似的东西:

2018-04-17 13:43:55.067047

每当在DATETIME参数中以毫秒(任何精度)调用SUBDATE()函数时,它将以毫秒为单位计算并分配输出的最大精度限制。