0

それは可能ですか?できるか

SELECT * FROM DATES_TBL WHERE DATES_TBL.DATES IN(NULL, >=SYSDATE)

? フォーマットが間違っているか、目盛りが欠けている可能性がありますか?

私が望むのは、今日の日付 ( ) 以上selectの日付フィールドの値です。どんな助けでも大歓迎です。NULL>=SYSDATE

SQL10g

4

4 に答える 4

3
SELECT * 
FROM DATES_TBL
WHERE DATES IS NULL OR DATES >= SYSDATE
于 2013-02-05T13:48:07.623 に答える
1

NULL 値は特別な値なので、次のようにステートメントを記述する必要があります。

SELECT *
FROM   DATES_TBL
WHERE  DATES IS NULL
OR     DATES >= SYSDATE
于 2013-02-05T13:47:16.907 に答える
1

これは間違いなく有効な構文ではありません。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列にインデックスが付けられていることを確認する必要があります。

于 2013-02-05T13:48:31.557 に答える
0

これがOracle用であると仮定して、これを試してください:

SELECT * FROM DATES_TBL WHERE (DATES_TBL.DATES が null または DATES_TBL.DATES >= sysdate)

括弧はそれを機能させます。

于 2017-10-23T21:57:13.413 に答える