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
的末尾添加了三个额外的零?
如何删除这些?
答案 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()函数时,它将以毫秒为单位计算并分配输出的最大精度限制。