【问题标题】:Date Difference condition in pl sqlpl sql中的日期差异条件
【发布时间】:2012-12-02 13:59:13
【问题描述】:

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

我知道如何获取日期差异超过一天的记录吗???

【问题讨论】:

  • 你可能想写OR而不是||(字符串连接运算符)

标签: sql oracle date select plsql


【解决方案1】:

要获取日期差超过一天的记录,减去日期并测试大于 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

【讨论】:

  • 对索引不太友好?
【解决方案2】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 2018-05-09
    • 2021-12-31
    相关资源
    最近更新 更多