postgres 查询昨天和今天之间的时间

Ric*_*hie 6 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
Run Code Online (Sandbox Code Playgroud)

有人可以帮我解决这个问题吗?

此外,我正在从集成工具运行查询,我发现该工具有时存在 :: 语法问题。因此,任何没有它的解决方案将不胜感激。但如果不存在,那也没关系。

提前致谢

Nic*_*ick 9

您的查询总体上是正确的,但有一个错误,错误的运算符 - 您使用 2>=而不是>=and <=

所以正确的是:

WHERE 
   recon_vr.paymentDateTime >= CURRENT_DATE - 1 + '18:00:00.000000'::time
AND    
   recon_vr.paymentDateTime <= CURRENT_DATE + '18:00:00.000000'::time
Run Code Online (Sandbox Code Playgroud)

此外,您可以使用BETWEEN

WHERE 
   recon_vr.paymentDateTime BETWEEN CURRENT_DATE - 1 + '18:00:00.000000'::time AND CURRENT_DATE + '18:00:00.000000'::time
Run Code Online (Sandbox Code Playgroud)

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

WHERE 
   recon_vr.paymentDateTime BETWEEN CURRENT_DATE - 1 + TIME '18:00' AND CURRENT_DATE + TIME '18:00'
Run Code Online (Sandbox Code Playgroud)

……或者像这样:

WHERE 
   recon_vr.paymentDateTime BETWEEN CURRENT_DATE - 1 + INTERVAL '18h' AND CURRENT_DATE + INTERVAL '18h'
Run Code Online (Sandbox Code Playgroud)

顺便说一句,在 Postgres 中使用 CamelStyle 对象名称会导致一些令人不快的问题——默认情况下,所有名称都不区分大小写(因此您可以轻松地编写recon_vr.paymentDateTime您的案例),除非您在创建时使用了双引号。如果是这样,您将需要永远使用双引号(recon_vr."paymentDateTime"为您提供纯骆驼风格的列名称,但您需要使用双引号来处理它,不太方便)。