SQL更新空值和将来的日期值

时间:2017-07-18 19:00:58

标签: sql oracle

我尝试使用where子句更新结束日期空值和未来日期值。

我使用以下查询进行检索,但无法获取空值和将来的结束日期值。

select * from GROUP where EMPLOYEE_ID = 133075 and END_DATE >= sysdate and END_DATE is null;


START DATE   END DATE
04/18/2014  **04/18/2018**
04/18/2014  NULL
04/18/2014  NULL
04/18/2014  03/24/2016
04/18/2014  03/24/2016
04/18/2014  07/07/2016
04/18/2014  NULL
04/18/2014  03/24/2016
12/26/2014  NULL
07/07/2016  07/08/2016
07/08/2016  NULL

1 个答案:

答案 0 :(得分:3)

只需将and切换为or并将日期逻辑包装在()中,以便OR包含这些条件中的任何一个。

如果对end_date编制索引并且更容易阅读/维护IMO,

应该更好。

SELECT * 
FROM GROUP 
WHERE EMPLOYEE_ID = 133075 
  and (END_DATE >= sysdate OR END_DATE is null);

SELECT * 
FROM GROUP 
WHERE EMPLOYEE_ID = 133075 
  and coalesce(END_DATE,Sysdate()) >= sysdate

后者不应该像end_date上的索引一样有效,也不能使用。但是处理空值的方式不同。不像它用当前的sysdate替换null那样优雅,因此确保它在null时总是至少相等。

我的初始评论已关闭,因为您不想要截断,因为它会导致< = not> =但是您可能会截断另一方...或者只是将它们留下来,因为sysdate应该= sysdate