-1

ORDERcolumnという名前のテーブルがありますcancel_date_time。私は使っている:

to_char(cancel_date_time,'YYYYMMDD HH24:MI:SS')
    not between ('20120214 10:00:00')
            and ('20120215 10:00:00') 

レコードを取得します。cancel_date_timeしかし、 is の場合、レコードは返されませんNULL

レコードを取得する際の問題は何かアドバイスできますか?

4

2 に答える 2

1

Null は値ではないため、他の値とは比較できません。

次のような構造を使用できます。

    ...
    where
      nvl (cancel_date_time, date_value_for_empty_cancel_date) 
      not between ('20120214 10:00:00') and ('20120215 10:00:00')

また、日付の文字列リテラルは NLS に依存しており、to_char はおそらくインデックスの使用を妨げます。

于 2013-02-27T00:16:13.807 に答える
1

2 つの日付の間にない行cancel_date_timeNULL一緒にある行が必要な場合cancel_date_time

WHERE cancel_date_time NOT BETWEEN to_date( '20120214 10:00:00','YYYYMMDD HH24:MI:SS') 
                               AND to_date( '20120215 10:00:00','YYYYMMDD HH24:MI:SS')
   OR cancel_date_time IS NULL

インデックスが作成される可能性のある列に関数を適用したくない場合。また、日付比較のセマンティクスが必要な場合は、日付を日付と比較します。最後に、NULLが他の値と等しくなることも等しくないこともないため、 を明示的にチェックする必要がありますIS NULL

于 2013-02-27T00:16:52.127 に答える