Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql ADDTIME不一致行为_Mysql_Timestamp - Fatal编程技术网

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的方法不起作用,我们将尝试一下!