1

我有一个记录表,当记录变为非活动状态时,一列保存该值。大多数记录仍处于打开状态,因此列中不包含任何值end_date

我想选择所有这些仍然处于活动状态的记录。实现这一目标的一种方法(从我的脑海中):

select *
from table t
where nvl(t.end_date, to_date('2099-DEC-31', 'MM-DD-yyyy')) > sysdate

但是感觉不太对。有没有更好的方法来实现我想要的?

编辑:顺便说一句,桌子不是很大,也不会增长:)

4

1 回答 1

2
select *
  from table t
 where nvl(t.end_date, to_date('2099-DEC-31', 'MM-DD-yyyy')) > sysdate

不会使用“正常”、非基于函数的索引,因此可能会损害性能。

你可以像这样查询它

select *
  from table t
 where t.end_date > sysdate OR t.end_date is null

反而

于 2013-08-22T13:04:54.277 回答