我对 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)
有人可以帮我解决这个问题吗?
此外,我正在从集成工具运行查询,我发现该工具有时存在 :: 语法问题。因此,任何没有它的解决方案将不胜感激。但如果不存在,那也没关系。
提前致谢
您的查询总体上是正确的,但有一个错误,错误的运算符 - 您使用 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"为您提供纯骆驼风格的列名称,但您需要使用双引号来处理它,不太方便)。
| 归档时间: |
|
| 查看次数: |
7085 次 |
| 最近记录: |