Oracle Query - 选择end_date(可能为NULL/EMPTY)大于sysdate的行

Oom*_*ity 0 sql oracle

我有Oracle表Demo_t,列的end_date值可能为null.我想选择所有end_date大于当前日期的行.

我在下面写过查询

select * from Demo_t where NVL(End_date,sysdate+3) > sysdate;
Run Code Online (Sandbox Code Playgroud)

毫无疑问,查询给出了预期的结果,但我想确保我没有遗漏某些东西,或者存在任何其他更好的解决方案.它将帮助我更好地理解Oracle数据库.

谢谢,

Ale*_*ete 5

如果End_Date为null,则将其记录在结果中.那是你要的吗?如果是这样你可以写它

SELECT *
FROM DEMO_T
WHERE END_DATE > SYSDATE OR END_DATE IS NULL;
Run Code Online (Sandbox Code Playgroud)

如果你不想那样,可以试试

SELECT *
FROM DEMO_T
WHERE END_DATE > SYSDATE;
Run Code Online (Sandbox Code Playgroud)

在你的代码中:

NVL(End_date,sysdate+3)实际上sysdate为表中的每一行增加,如果你只需检查End_Datenull 就不是一个好主意

编辑:正如@Thorsten Kettner所说,查询中只有一个sysdate,因此不会为每行计算