WHERE (internalagentname is not null or internalagentcode is not null)
and (source LIKE '%GETAWAY%' or source like '%VACATION%')
and initialbookingdate <= to_Date(to_char(sysdate-1,'MM/DD/YYYY'),
'MM/DD/YYYY')
and (ABS(total_revenue) + ABS(total_cost) + ABS(booking_adjustment))<>0
所以,这是我最后一步查询我是从昨天的日期提取数据。不幸的是,它读取这个为sysdate - 1(从当前时间)以及为什么它也有来自今天当前日期的数据,我怎么能改变这个以便它只从上午12点和之前取出数据?谢谢
答案 0 :(得分:3)
您应该只使用逻辑:
initialbookingdate < trunc(sysdate - 1)
问题是<=
。当前时间与问题无关,因为转换中没有时间组件返回日期。然而,你的表达方式比它需要的更复杂。
答案 1 :(得分:0)
说你需要属于“昨天”的数据,看看这个:
SQL> select
2 sysdate right_now,
3 trunc(sysdate) todays_midnight,
4 trunc(sysdate - 1) yesterdays_midnight
5 from dual;
RIGHT_NOW TODAYS_MIDNIGHT YESTERDAYS_MIDNIGHT
------------------- ------------------- -------------------
21.03.2018 21:31:46 21.03.2018 00:00:00 20.03.2018 00:00:00
SQL>
这意味着一个选项是选择initialbookingdate
介于“yesterdays_midnignt”和“todays_midnight”之间的值,即
where initialbookingdate between trunc(sysdate - 1) and trunc(sysdate)
(请注意,BETWEEN 包含)。
一个更简单的选项,它会破坏你在initialbookingdate
上可能拥有的索引(所以 - 虽然更简单,但要谨慎使用它。在小数据量上你不会看到问题,但是当处理很多行时 - 是的,你会)
where trunc(initialbookingdate) = trunc(sysdate - 1)
答案 2 :(得分:0)
尝试在查询条件中使用以下代码,
ALTER SESSION SET NLS_DATE_FORMAT = 'MM/DD/YYYY HH:MI:SS AM';
SELECT TRUNC(sysdate)-(.00019/24) date_
FROM dual;
DATE_
----------------------
03/21/2018 11:59:59 PM