我有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数据库.
谢谢,
如果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,因此不会为每行计算