SELECT Ticket, ETRs, "Last ETR","Last ETR Time Change","STAR Restore Time","Restore Time - Last ETR"
FROM(
SELECT e.xsystemjob Ticket,
a.eventkey Event,
(select count(generatedtime) from obvwh.ops_ertchangelog_fact where eventkey = a.eventkey) ETRs,
to_char(a.ERT, 'MM/DD/YYYY HH24:MI:SS') "Last ETR", --GENERATEDTIME,
to_char(generatedtime, 'MM/DD/YYYY HH24:MI:SS') as "Last ETR Time Change",
to_char(e.restdate,'MM/DD/YYYY HH24:MI:SS') as "STAR Restore Time",
round(((e.restdate - a.generatedtime) * 1440),0) as "Restore Time - Last ETR"
FROM obvwh.ops_ertchangelog_fact a
join obvwh.ops_event_dim e
on a.eventkey = e.eventkey
where a.generatedtime = (select max(generatedtime) from obvwh.ops_ertchangelog_fact where eventkey = a.eventkey)
)
WHERE Substr(Ticket,0,1) = region
AND to_char("Last ETR", 'MM/DD/YYYY') between to_char(start_date,'MM/DD/YYYY') and to_char(end_date,'MM/DD/YYYY');
答案 0 :(得分:0)
从您的内部查询中,SearchResult
是一个字符串,表示格式为Last ETR
的列值。您正在尝试将该字符串转换为字符串,传递单个格式掩码,这就是抛出错误。
您可以通过更简单的演示看到相同的事情:
MM/DD/YYYY HH24:MI:SS
您可以将字符串显式转换为日期然后再转发:
select to_char('07/18/2016 12:13:14', 'MM/DD/YYYY') from dual;
Error report -
SQL Error: ORA-01722: invalid number
...但是在比较的情况下,如果你所比较的范围可以跨越一年结束,那么无论如何还是没有意义 - 你正在使用的格式掩码不是&# 39; t允许简单比较。假设select to_char(to_date('07/18/2016 12:13:14', 'MM/DD/YYYY HH24:MI:SS'), 'MM/DD/YYYY') from dual;
TO_CHAR(TO
----------
07/18/2016
和start_date
是日期(时间设置为午夜),您可以这样做:
end_date
甚至更简单,使用原始的原始AND to_date("Last ETR", 'MM/DD/YYYY HH24:MI:SS') between start_date and end_date;
值(可能已经是日期),并将其转换为字符串 - 如果这实际上是正确的事情 - 在最外面的选择列表中。< / p>
我不完全确定为什么你在这里有一个内联视图,或者你为什么要使用子查询来获取计数,因为你已经查询ERT
- 也许你想在这里使用分析函数。