用时间查询行-PostgreSQL

时间:2018-07-07 16:54:00

标签: javascript psql

目前,我有一个简单的查询,可以从数据库中获取属于特定联赛的固定装置,然后按启动时间进行排序。

response = await pool.query('SELECT * FROM fixtures WHERE league_name = $1 ORDER BY kick_off ASC', [leagueName]);

现在,如果我想对此进行扩展并返回即将到来或正在运行的装置(因此现在可以说是2小时的缓冲时间),我应该看什么查询? kick_off时间存储为VARCHAR,因此15:0019:00

我当时正在考虑使用javascript从用户浏览器中获取时间并传递时间并进行比较,但是时区会让这个棘手的事情正确吗?所以我的想法是在服务器上执行此操作,以便知道它是一致的吗?

我不确定查询内容

如果我的假设不对,很高兴在这里学习可以纠正

谢谢

1 个答案:

答案 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个小时,但我不确定所涉及的运动是什么,即使我参加,我也不确定平均比赛时长。现在就更改( )-适合。)