Mysql ADDTIME不一致行为
为什么以下查询在结果字段中产生不一致的结果Mysql ADDTIME不一致行为,mysql,timestamp,Mysql,Timestamp,为什么以下查询在结果字段中产生不一致的结果 SELECT NOW() AS xTime, FLOOR(RAND()*(99-35+1)+35) AS AddMins, ADDTIME( (SELECT xTime), CONCAT('00:', CAST((SELECT AddMins) AS CHAR))) AS Result; 有时它会返回如下时间戳: 2018-08-06 15:45:16.000000 用6位小数代替0位
SELECT
NOW() AS xTime,
FLOOR(RAND()*(99-35+1)+35) AS AddMins,
ADDTIME(
(SELECT xTime),
CONCAT('00:', CAST((SELECT AddMins) AS CHAR))) AS Result;
有时它会返回如下时间戳:
2018-08-06 15:45:16.000000
用6位小数代替0位小数。有时它甚至会返回:
null
我遗漏了什么?以下查询有效:
SELECT
xTime,
addMins,
TIMESTAMPADD(MINUTE, AddMins, xTime) Result
FROM
(
SELECT
NOW() AS xTime,
FLOOR(RAND()*(99-35+1)+35) AS AddMins
) t;
原始方法中的问题是使用时间字符串(如
00:76
)调用ADDTIME
,这将导致函数崩溃,因为您指定的时间超过60分钟。相反,最接近的方法可能是使用TIMESTAMPADD
,正如我在上面使用的那样。当分钟数超过59时,它返回NULL,当您给它一个以“.000”结尾的字符串时,它在结尾返回零(但不知道为什么)
您可以使用类似的方法来添加随机的分钟数:
SELECT NOW()+ INTERVAL (FLOOR(RAND()*(99-35+1)+35)) MINUTE
在MySQL中,浮点运算是不精确的。因此,如果您的查询是这样做的,您可能会出现一些小数位舍入错误。如果这是一个问题,那么你应该使用一个精确的数字类型。我需要如何调整我的查询以解决这个问题?我认为分钟数应该低于100(即00-99),而不是低于59。我也使用了
时间戳添加
。谢谢你的帮助!感谢您的这种方法,如果Tim的方法不起作用,我们将尝试一下!