【问题标题】:Maximo search completed order yesterday SQL where clauseMaximo 搜索昨天完成的订单 SQL where 子句
【发布时间】:2020-05-27 08:13:48
【问题描述】:

我正在尝试创建一个“动态”查询来每天早上运行计划报告。 我有一个客户希望每天早上发送一份报告,以便他获得有关昨天关闭的票证的信息。

我试图用查询搜索昨天。见下文:

((woclass = 'WORKORDER' or woclass = 'ACTIVITY') and upper(reportedby) = 'Personthatreported@person.com' and istask = 0 and (siteid = 'TPSELUN' or siteid = 'TPSELUO' and (actfinish between trunc(sysdate-1) and sysdate)))

我没有收到错误消息,但结果不正确。 是否有另一种方法可以搜索昨天的实际完成情况。

【问题讨论】:

    标签: sql oracle where-clause maximo


    【解决方案1】:

    如果您只想找到昨天的数据,那么您需要尝试使用

    actfinish between trunc(sysdate-1) and trunc(sysdate)- INTERVAL '1' SECOND
    

    trunc(actfinish) = trunc(sysdate-1)  
    

    【讨论】:

    • 您的答案很好,但您的第一个查询有可能遗漏一些内容。使用between,原则上您总是会错过一些东西,因为它只包含您指定的精度。另一方面,actfinish >= trunc(sysdate-1) and actfinish < trunc(sysdate) 将包括昨天的所有内容,精确到无限。因此,您的第一个查询将错过当天最后一秒但在第一部分之后记录的事件。第二个查询的性能会更差,因为使用函数调用包装列引用往往会阻止在这些列上使用索引。
    • @Preacher 考虑到日期数据类型的actfinish,第一次查询不会遗漏任何内容,因为second是日期数据类型中的最小单位。
    • @Tejash 是的。实际上,由于 Oracle 中的日期数据类型只有秒的精度,您的查询不会遗漏任何内容。但原则上,它会错过将近一秒钟。牢记这一原则有助于跨语言和不同精度的日期数据类型。
    • 如果我想进行“上个月”搜索怎么办?不是 -30 天,因为每个月的天数都不一样。
    • 你需要使用ADD_MONTHS函数。
    猜你喜欢
    • 2020-12-14
    • 2020-08-20
    • 2020-12-12
    • 2022-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多