2016-04-22 8 views
0

これはおそらくあなたのほとんどにとっては簡単な質問ですが、このマスクをどのようにして1日だけ実行することができますか?日にちを基準にして実行するOracleを実行する

誰でもCrystal Reportsの構文を知っている場合、我々はこれを持って、それは{PO_RECEIPTS.DATE_RECEIVED} = CURRENTDATE

ただし、Oracle SQLに変換するときに、どのように私の標準的なことができます動作します:TO_CHAR (SYSDATE、「MM- DD-YYYY HH24:MI:SS ')が範囲になるようにして、その日にはすべてを選択することができます。

今日は00:00:00から23:59:59までです

ありがとうございました!

答えて

3

PO_RECEIPTS.DATE_RECEIVEDた場合は、あなたが行うことができ、すべての時間が深夜に設定されている日付カラムです:

WHERE PO_RECEIPTS.DATE_RECEIVED = TRUNC(sysdate) 

値が、他の回を持っているなら、あなたは範囲を使用することができます。

WHERE PO_RECEIPTS.DATE_RECEIVED >= TRUNC(sysdate) 
AND PO_RECEIPTS.DATE_RECEIVED < TRUNC(sysdate) + 1 

日付を切り捨てると、デフォルトで深夜時間が設定されるため、TRUNC(sysdate)は今朝深夜です。この範囲では、今日の深夜0時以降、すべてのレコードが明日深夜よりも遅くなります。これは通常のOracle日時演算を使用してTRUNC(sysdate) + 1があなたに与えるものです。

実際にTO_CHAR()の文字列に変換する必要はありません。すべての列の値を文字列に変換する(非効率的でインデックスが使用されないようにする)か、文字列を(暗黙的に)日付に戻す必要があります。列の値を同じデータ型と比較して、混乱を減らすか、避ける方が良いでしょう。

+0

完璧、ありがとうございます! –

+0

さらに、アレックスがしなかったことに注意し、覚えておいてください。 TRUNC(DATE_RECEIVED)とTRUNC(SYSDATE)を比較する方が簡単でした(タイピングが少ない)。しかし、それは良い習慣ではありません。関数内の列値の折り返しを避けることができるときは、長いコードを犠牲にしても、その行を避ける必要があります。これはパフォーマンス(DATE_RECEIVED列の索引を使用できるかどうかです。問合せではこのフィールドが重要であるため、索引を使用する可能性があります)。常に良いコーディング実践を証明するための+1。 – mathguy

+0

Mathguyありがとうございます、私はこれを今後も心に留めておきます。私はコーディングの適切な習慣についてたくさん学んでいます。 –

関連する問題