这可能吗?可以吗
SELECT * FROM DATES_TBL WHERE DATES_TBL.DATES IN(NULL, >=SYSDATE)
?也许我格式错误,或者错过了勾号?
我希望select
是日期字段中NULL
或大于今天日期(>=SYSDATE
)的值。任何帮助将不胜感激。
SQL 10g
答案 0 :(得分:3)
SELECT *
FROM DATES_TBL
WHERE DATES IS NULL OR DATES >= SYSDATE
答案 1 :(得分:1)
NULL值是一个特殊值,因此您必须编写如下语句:
SELECT *
FROM DATES_TBL
WHERE DATES IS NULL
OR DATES >= SYSDATE
答案 2 :(得分:1)
这绝对不是一种有效的语法:IN
查询需要特定的项目;另外,因为在SQL中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
列已编入索引。
答案 3 :(得分:0)
假设这是针对Oracle的,请尝试以下方法:
SELECT * FROM DATES_TBL WHERE(DATES_TBL.DATES为null或DATES_TBL.DATES> = sysdate)
括号使其有效。