pl sql中的日期差异条件

时间:2012-12-14 14:44:35

标签: sql oracle date select plsql

我在PL-SQL中有一个查询。我想选择记录,其中当前的日期差异超过一天和其他一些条件......

select round(sysdate - u.RecordDate) as deleteme,
       round(sysdate - u.Payment_date) as payment,
       nvl(isverified, 0) as Verified

  from user_cards u

 where ((round(sysdate - u.RecordDate) > 0) || (round(sysdate - u.Payment_date) > 0))
   and nvl(isverified, 0) = 0
 order by id desc


但此处存在问题 where ((round(sysdate - u.RecordDate) > 0) || (round(sysdate - u.Payment_date) > 0))

任何想法如何在日期差异超过一天的情况下获取记录???

2 个答案:

答案 0 :(得分:2)

要获得日期差异超过一天的记录,只需减去日期并测试大于1:

sysdate - u.RecordDate > 1

代码:

sysdate - u.RecordDate > 1 OR sysdate - u.Payment_date > 1

更多信息:http://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements001.htm#i48042

答案 1 :(得分:0)

我真的不喜欢“日期X与今天的差异超过Y天”的这句话,...人们真的这么说吗?难道你不会说日期X超过Y天前吗?

无论如何,为了能够使用索引,我会选择:

u.RecordDate < sysdate-1 OR u.Payment_date < sysdate-1

如果这是一个普通的工作,那么它可以由一个基于函数的单列索引支持,它有助于以下谓词:

Least(u.RecordDate,u.Payment_date) < sysdate-1