我对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的问题。因此,任何没有它的解决方案将不胜感激。但如果不存在那么那也没关系。
提前致谢
答案 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'