【发布时间】:2016-01-14 09:29:14
【问题描述】:
我有 Oracle 表 Demo_t,有列 end_date,它的值可能为 null。我想选择所有end_date 大于当前日期的行。
我在下面写了查询
select * from Demo_t where NVL(End_date,sysdate+3) > sysdate;
毫无疑问,查询给出了预期的结果,但我想确保我没有遗漏任何东西或存在任何其他更好的解决方案。它将帮助我更好地了解 Oracle 数据库。
谢谢,
【问题讨论】:
-
为什么如果 end_date 为空,你会用 sysdate+3 代替?
-
避免对数据使用函数来实现过滤;那是“不可分割的”(无法使用索引)。更好地使用“sargable”替代品,例如where ( end_date > sysdate or end_date IS NULL ) 请参阅@kikyalex nb 的回答:因为它涉及 OR 运算符,如果有其他条件需要考虑,您可能需要包含括号