那可能吗?可以一个
SELECT * FROM DATES_TBL WHERE DATES_TBL.DATES IN(NULL, >=SYSDATE)
? 也许我的格式不正确,或者错过了一个勾号?
我想要的select
是日期字段中NULL
大于或等于今天日期(>=SYSDATE
)的值。任何帮助,将不胜感激。
SQL 10g
SELECT *
FROM DATES_TBL
WHERE DATES IS NULL OR DATES >= SYSDATE
NULL 值是一个特殊值,因此您必须像这样编写语句:
SELECT *
FROM DATES_TBL
WHERE DATES IS NULL
OR DATES >= SYSDATE
这绝对不是一个有效的语法: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
列已编入索引。
假设这是针对 Oracle 的,试试这个:
SELECT * FROM DATES_TBL WHERE(DATES_TBL.DATES 为空或 DATES_TBL.DATES >= sysdate)
括号使它工作。