それは可能ですか?できるか
SELECT * FROM DATES_TBL WHERE DATES_TBL.DATES IN(NULL, >=SYSDATE)
? フォーマットが間違っているか、目盛りが欠けている可能性がありますか?
私が望むのは、今日の日付 ( ) 以上select
の日付フィールドの値です。どんな助けでも大歓迎です。NULL
>=SYSDATE
SQL10g
SELECT *
FROM DATES_TBL
WHERE DATES IS NULL OR DATES >= SYSDATE
NULL 値は特別な値なので、次のようにステートメントを記述する必要があります。
SELECT *
FROM DATES_TBL
WHERE DATES IS NULL
OR DATES >= SYSDATE
これは間違いなく有効な構文ではありません。IN
クエリには特定のアイテムが必要です。また、SQL では null は、他の null を含め、何にも等しくならないため、null をIN
リストに入れることは意味がありません。
代わりに必要なのはOR
:
SELECT * WHERE (DATES_TBL.DATES IS NULL) OR (DATES_TBL.DATES>=SYSDATE)
-- ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^
-- | |
-- | +- This is how you compare for >=
-- +------------- This is how you check for NULL
OR 句を使用しようとするたびに、多くの実行時間が発生します
重複しない結果を結合するために が導入された場合OR
(この場合は、列がnull
よりも大きいかのいずれかでありSYSDATE
、両方ではないため)、 を使用UNION ALL
して検索を高速化できる可能性があります。
SELECT * WHERE DATES_TBL.DATES IS NULL
UNION ALL
SELECT * WHERE DATES_TBL.DATES >= SYSDATE
DATES_TBL.DATES
列にインデックスが付けられていることを確認する必要があります。
これがOracle用であると仮定して、これを試してください:
SELECT * FROM DATES_TBL WHERE (DATES_TBL.DATES が null または DATES_TBL.DATES >= sysdate)
括弧はそれを機能させます。