2014-07-09 74 views
0

发展是本地主机上运行的版本5.6.16,产量是73年5月1日-CLLDATE_ADD回到生产服务器上NULL,从事开发工作

此查询的DATE_ADD返回生产NULL,但在发展究竟是干什么的我希望它(在game_time列中增加90分钟),game_time列是一个字符串,它包含以下格式的时间:'21:00'。 这是查询:

SELECT TIME(game_time), 
     DATE_ADD(TIME(game_time), 
     INTERVAL 90 MINUTE), 
     TIME(NOW()) 
    FROM games 

这是怎么回事?我究竟做错了什么?

我知道时间应该在TIMESTAMP或TIME中,但我正在工作某人elses代码,我没有从头开始自己。

我也只注意到TIME()返回不同的东西,在发展中,TIME('21:00' )返回21:00:00.000000,在生产中我只得到21:00:00

管理得周围,不漂亮,但它的作品。

SEC_TO_TIME(TIME_TO_SEC(TIME(game_time))+5400) 

回答

0

尝试转换移动到时间DATE_ADD外: -

SELECT TIME(game_time), TIME(DATE_ADD(game_time, INTERVAL 90 MINUTE)), TIME(NOW()) 
FROM games 

DATE_ADD工作在一个日期或日期时间字段,因为它是你传递一个时间域。

1

您更好地使用相同的版本与生产服务器开发:

你的旧版本将您TIME值转换为一个日期,因为它是一个无效的日期,它会得到NULL,见手册章Conversion Between Date and Time Types

下面是相关的部分:

5.6.4之前,MySQL的解析时间的字符串值作为一个日期或时间值的日期或日期和时间 值转换3210日期和时间。这不太可能有用。例如,解释为日期的'23:12:31' 变为'2023-12-31'。时间值无效,因为 日期变为'0000-00-00'或NULL。

编辑:

要获得TIME值与期望的结果,你可以使用ADDTIME。 这可能是工作:

SELECT TIME(game_time), 
    ADDTIME (TIME(CONCAT(CURDATE(), ' ', game_time))), 
    '01:30:00'), 
    TIME(NOW()) 
FROM games 

未经检验的,因为我没有这样的旧的MySQL版本了。

+0

啊,所以我可能不得不使用STR_TO_DATE呢?我设法从STR_TO_DATE得到我想要的,但是一旦我把它放入DATE_ADD函数中,我仍然得到NULL。 – aabreu

+0

TIME返回我想要的,这完美地工作:SEC_TO_TIME(TIME_TO_SEC(TIME(game_time))+ 5400) – aabreu

相关问题