updated_date = 08-Jun-2010;
このようなクエリがあります
select * from asd whre updated_date <= todate('08-Jun-2010', 'dd-MM-yy');
しかし、私は何の結果も得ていません。 todate
が2010年6月9日である場合にのみ機能します。
つまり、equalto
演算子が正しく機能していません。
なんでそんなの?
Oracleでは、DATEは特定の時点です。常に秒単位の精度の時間成分があります。 todate('08-Jun-2010', 'dd-Mon-yyyy')
はOracleではtodate('08-Jun-2010 00:00:00', 'dd-Mon-yyyy hh24:mi:ss')
と同じです。したがって、その日付までの行を選択した場合、その日の時間コンポーネントが00:00
に等しくない行は取得されません。
08-JUN-2010
までのすべての行を選択する場合は、次を使用することをお勧めします。
< to_date('09-06-2010', 'dd-MM-yyyy')
または
<= to_date('08-06-2010 23:59:59', 'dd-MM-yyyy hh24:mi:ss')
注-日付形式を修正しました。省略形の月名を使用する場合は、MON
を使用する必要があります。代わりにMM
を使用することをお勧めします。これにより、誰かがクライアント設定(NLS_DATE_LANGUAGE
)を変更したときにエラーが発生しなくなります。また、YYYY
の代わりにYY
を使用することをお勧めします。
これをチェックして、
select to_date('08-Jun-2010', 'dd-MON-yyyy') from dual;
2010-06-08 00:00:00
と同じです。時間に注意してください。
updated_date
には時間部分があります。それらを含めるには、このクエリを使用してください、
select * from asd where trunc(updated_date) <= to_date('08-Jun-2010', 'dd-MON-yyyy');
DateパラメータのデフォルトのTRUNC
関数は、時間を削除します。
参照 Trunc