我正在locanhost和Openshift上测试表,我遇到的问题是,在openshift上查询类似WHERE arrivaltime BETWEEN curtime() - INTERVAL 2 MINUTE AND curtime() + INTERVAL 2 MINUTE的数据时我什么也没回来,尽管在本地主机上我得到的是9号路由。在openshift上,我根据服务器时间插入到达时间。在localhost上,我正在根据本地时间插入到达时间,但是当我将查询更改为这种形式WHERE time_format(arrivaltime,'%H:%i')= time_format(curtime() ,'%H:%i')时,我在openshift上得到了一些恢复,但是我的响应必须是+-2分钟。没有间隔,我怎么能做到这一点,或者有人可以看到问题?

测试表:

CREATE TABLE test(
id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
 arrivaltime Time  NOT NULL,
 route INT(11) NOT NULL
)


插入数据:

INSERT INTO test(arrivaltime, route) values('11:17:00', 9)


此查询在Openshift上不起作用,并且在localhost上起作用:

SELECT route FROM test
WHERE arrivaltime BETWEEN curtime() - INTERVAL 2 MINUTE AND curtime() + INTERVAL 2 MINUTE


Openshift时间:

curtime()
11:18:57


当我在openshift上查询test时,我得到响应,但到达时间应等于当前时间。

SELECT route FROM test
WHERE time_format(arrivaltime,'%H:%i')= time_format(curtime() ,'%H:%i')

最佳答案

我认为您的问题是由于MySQL中当前的日期/时间函数完全混淆而引起的。它们不返回timedatetimedate值。相反,它们返回字符串或数字:


  以'HH:MM:SS'或HHMMSS格式返回当前时间作为值。
  取决于该函数是以字符串还是数字形式使用
  上下文。该值以当前时区表示。


-表示将值解释为数字。为了解决这个问题,我通常使用date_sub()。但是您有time值,因此您可以尝试:

WHERE arrivaltime BETWEEN time(curtime()) - INTERVAL 2 MINUTE AND
                          time(curtime()) + INTERVAL 2 MINUTE

关于mysql - SQL INTERVAL在openshift上不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30414436/

10-13 00:47