为什么以下查询在“结果”字段中产生不一致的结果?
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
我想念什么?
答案 0 :(得分:1)
以下查询有效:
SELECT
xTime,
addMins,
TIMESTAMPADD(MINUTE, AddMins, xTime) Result
FROM
(
SELECT
NOW() AS xTime,
FLOOR(RAND()*(99-35+1)+35) AS AddMins
) t;
原始方法的问题是使用诸如ADDTIME
之类的时间字符串调用00:76
,这将使函数崩溃,因为您指定的时间超过60分钟。相反,最接近的事情可能是使用TIMESTAMPADD
,就像我上面使用的那样。
答案 1 :(得分:1)
当您的分钟数超过59时,它将返回NULL,而当您给它提供以'.000结尾的字符串时,它将在末尾返回零。 (不知道为什么)。
您可以使用类似的方法随机添加分钟数:
SELECT NOW()+ INTERVAL (FLOOR(RAND()*(99-35+1)+35)) MINUTE