目前,我有一个简单的查询,可以从数据库中获取属于特定联赛的固定装置,然后按启动时间进行排序。
response = await pool.query('SELECT * FROM fixtures WHERE league_name = $1 ORDER BY kick_off ASC', [leagueName]);
现在,如果我想对此进行扩展并返回即将到来或正在运行的装置(因此现在可以说是2小时的缓冲时间),我应该看什么查询? kick_off
时间存储为VARCHAR
,因此15:00
或19:00
。
我当时正在考虑使用javascript从用户浏览器中获取时间并传递时间并进行比较,但是时区会让这个棘手的事情正确吗?所以我的想法是在服务器上执行此操作,以便知道它是一致的吗?
我不确定查询内容
如果我的假设不对,很高兴在这里学习可以纠正
谢谢
答案 0 :(得分:1)
将时间存储为varchar会使此过程变得不必要地困难(不可能有边界线)。原因是您的数据库无法将其理解为时间,因此您实际上必须使用自己的时间排序功能。 gh。
您需要做的是将kick_off更改为TIME,TIMESTAMP甚至TIMESTAMP WITH TIMEZONE。然后您的查询将如下所示:
SELECT * FROM fixtures
WHERE league_name = $1
AND kick_off > NOW()-interval '2 hour'
AND kick_off < NOW()+interval '2 hour'
ORDER BY kick_off ASC;
无需费心浏览器的时间,您的数据库已经知道现在几点了!
(请注意,我假设一场比赛需要2个小时,但我不确定所涉及的运动是什么,即使我参加,我也不确定平均比赛时长。现在就更改( )-适合。)