この質問の答えを見つけるためにウェブを検索するのに何時間も費やしました...
現在私が持っているものは次のとおりです。
select *
from order_header oh
where tran_date = sysdate-1
前もって感謝します。
つかいます:
AND oh.tran_date BETWEEN TRUNC(SYSDATE - 1) AND TRUNC(SYSDATE) - 1/86400
tran_date
で関数を呼び出すと、オプティマイザーはそれに関連付けられたインデックス(存在する場合)を使用できなくなります。 Oracleなどの一部のデータベースは、そのような状況での影響を最小限に抑えるためにデータに対して関数を実行できる関数ベースのインデックスをサポートしていますが、IME DBAはこれらを許可しません。そして、私は同意します-彼らはこの例では本当に必要ではありません。
trunc(tran_date) = trunc(sysdate -1)
to_char(tran_date, 'yyyy-mm-dd') = to_char(sysdate-1, 'yyyy-mm-dd')
このコメントは、このエントリを見つけたがOracleではなくmysqlを使用している読者向けです。 mysqlでは、次のことができます。Today
SELECT *
FROM
WHERE date(tran_date) = CURRENT_DATE()
昨日
SELECT *
FROM yourtable
WHERE date(tran_date) = DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)
将来の日付のトランザクションをサポートしない場合、このような何かが動作する可能性があります:
AND oh.tran_date >= trunc(sysdate-1)
昨日のタイムスタンプが必要な場合は、次のようにします。
(CURRENT_TIMESTAMP - INTERVAL '1' DAY)