2017-07-12 21 views
1

私はかなり新しいpostgresです。私は昨日18:00と今日18:00にすべてのレコードを取得するために書く必要があるクエリに苦労しています。昨日と今日との間のpostgresクエリ

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

誰かが助けてくださいでした...

は、これまでのところ私はこのような述語を試してみたが、クエリを実行しながら、私は望ましい結果を得ることはありませんので、右ではないようです私はこれで?

また、私は時には::構文に問題があることがわかった統合ツールからクエリを実行しています。そのようなソリューションがなければ、大いに感謝します。しかし、それが存在しない場合はそれも良いです。事前

答えて

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 + TIME '18:00' AND CURRENT_DATE + TIME '18:00' 

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

問題を回避するには::timeであなたはこのようにそれを書くことができます...またはこのように:

デフォルトでは、すべての名前は、大文字と小文字を区別しません(あなたが簡単にあなたのケースで recon_vr.paymentDateTimeを書くことができます)、あなたは二重引用符を使用していない限り - ところで、PostgresのでCamelStyle・オブジェクト名を使用すると、いくつかの不快な問題につながることができます10
WHERE 
    recon_vr.paymentDateTime BETWEEN CURRENT_DATE - 1 + INTERVAL '18h' AND CURRENT_DATE + INTERVAL '18h' 

作成時にもしそうなら、二重引用符を永遠に使用する必要があります(recon_vr."paymentDateTime"はあなたに純粋なラクダ風の列名を与えますが、それを扱うのに二重引用符を使う必要があります。

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' 
関連する問題