昨天时间和今天

时间:2017-07-12 07:41:15

标签: postgresql

我对postgres相当陌生,我正在努力解决一个问题,我必须在昨天的18:00和今天的18:00之间写下所有记录。

到目前为止,我已经尝试过这样的谓词,但它似乎不正确,因为查询运行时我没有得到所需的结果...

WHERE 
   recon_vr.paymentDateTime >= CURRENT_DATE -1 + '18:00:00.000000'::time
AND    
   recon_vr.paymentDateTime >= CURRENT_DATE + '18:00:00.000000'::time

有人可以帮帮我吗?

另外,我正在运行一个集成工具的查询,我发现有时会遇到:: syntax的问题​​。因此,任何没有它的解决方案将不胜感激。但如果不存在那么那也没关系。

提前致谢

2 个答案:

答案 0 :(得分:1)

您的查询一般是正确的,但有错误,错误的操作符 - 您使用了2 >=而不是>=<=

所以正确的是:

WHERE 
   recon_vr.paymentDateTime >= CURRENT_DATE - 1 + '18:00:00.000000'::time
AND    
   recon_vr.paymentDateTime <= CURRENT_DATE + '18:00:00.000000'::time

另外,您可以使用BETWEEN

WHERE 
   recon_vr.paymentDateTime BETWEEN CURRENT_DATE - 1 + '18:00:00.000000'::time AND CURRENT_DATE + '18:00:00.000000'::time

为避免::time出现问题,您可以这样写:

WHERE 
   recon_vr.paymentDateTime BETWEEN CURRENT_DATE - 1 + TIME '18:00' AND CURRENT_DATE + TIME '18:00'

......或者像这样:

WHERE 
   recon_vr.paymentDateTime BETWEEN CURRENT_DATE - 1 + INTERVAL '18h' AND CURRENT_DATE + INTERVAL '18h'
BTW,在Postgres中使用CamelStyle对象名称可能会导致一些令人不快的问题 - 默认情况下,所有名称都不区分大小写(因此您可以轻松地在您的情况下编写recon_vr.paymentDateTime),除非您使用了双 - 在创作时引用。如果是这样,你将需要永远使用双引号(recon_vr."paymentDateTime"为你提供纯粹的驼峰式colunm名称,但你需要使用双引号来处理它,而不是那么方便)。

答案 1 :(得分:0)

尝试

... 
where recon_vr.paymentDateTime between
current_date - interval '1 day' + time '18:00:00' and current_date + time '18:00:00'

... 
where recon_vr.paymentDateTime between
current_date - time '06:00:00' and current_date + time '18:00:00'