ADDTIME行为不一致

时间:2018-08-06 13:08:33

标签: 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个小数。有时甚至返回:

null

我想念什么?

2 个答案:

答案 0 :(得分:1)

以下查询有效:

SELECT
    xTime,
    addMins,
    TIMESTAMPADD(MINUTE, AddMins, xTime) Result
FROM
(
    SELECT 
        NOW() AS xTime, 
        FLOOR(RAND()*(99-35+1)+35) AS AddMins
) t;

enter image description here

Demo

原始方法的问题是使用诸如ADDTIME之类的时间字符串调用00:76,这将使函数崩溃,因为您指定的时间超过60分钟。相反,最接近的事情可能是使用TIMESTAMPADD,就像我上面使用的那样。

答案 1 :(得分:1)

当您的分钟数超过59时,它将返回NULL,而当您给它提供以'.000结尾的字符串时,它将在末尾返回零。 (不知道为什么)。

您可以使用类似的方法随机添加分钟数:

SELECT NOW()+ INTERVAL (FLOOR(RAND()*(99-35+1)+35)) MINUTE