1

我在 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))

任何想法我如何获得日期差异超过一天的记录?

4

2 回答 2

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

于 2012-12-14T14:49:54.120 回答
0

我真的很不喜欢这种“日期X和今天的差超过Y天”的说法,……人们真的会这样说话吗?您通常不会说日期 X 早于 Y 天前吗?

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

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

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

Least(u.RecordDate,u.Payment_date) < sysdate-1
于 2012-12-15T21:35:08.957 回答