0

那可能吗?可以一个

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

? 也许我的格式不正确,或者错过了一个勾号?

我想要的select是日期字段中NULL大于或等于今天日期(>=SYSDATE)的值。任何帮助,将不胜感激。

SQL 10g

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查询需要特定的项目;IN另外,因为在 SQL 中 null 永远不等于任何东西,包括其他 null,所以将 null 放入列表中是没有意义的。

你需要的是一个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引入 when 来组合非重叠结果的情况下(在这种情况下是这样,因为列是或者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 为空或 DATES_TBL.DATES >= sysdate)

括号使它工作。

于 2017-10-23T21:57:13.413 回答