我在sql developer下运行sql:
SELECT count(*)
from FTTH_AMS_DEVICE_METRICS DAT
where TRUNC(DAT.COLLECTION_TMS)>(select start_dt from ETL_JOB_CONTROL where job_name='s_m_ftth_prfrm_fact_tbl')
and TRUNC(DAT.COLLECTION_TMS)<=(select end_dt from ETL_JOB_CONTROL where job_name='s_m_ftth_prfrm_fact_tbl')
我获得了3800万行。
当我在过滤器中使用硬编码值时,如下所示并运行查询:
SELECT count(*)
from FTTH_AMS_DEVICE_METRICS DAT
where TRUNC(DAT.COLLECTION_TMS)> TO_DATE('10-14-2016','MM-DD-YYYY')
and TRUNC(DAT.COLLECTION_TMS)<= TO_DATE('10-15-2016','MM-DD-YYYY')
我有1200万行。
因为我通过informatica中的参数文件传递日期值。
当我在Informatica中运行时,我非常困惑如何处理这个并获得3800万行。
COLLECTION_TMS的数据类型是时间戳,end_dt是日期时间。
如果您需要更多相关信息,我会立即分享。
感谢您的帮助。
答案 0 :(得分:1)
如果日期与您显示的完全相同,那么在第二个查询中,您应该> to_date ('10-15-2016', 'mm-dd-yyyy') and <= to_date('10-16-2016', 'mm-dd-yyyy')
。你正在比较错误的日期。
答案 1 :(得分:0)
date
数据类型支持时间组件。但是,当您打印日期时,通常会删除时间组件。
我猜测start_dt
中的end_dt
和ETL_JOB_CONTROL
中的值包含时间成分。
如果是这样,以下查询应返回至少3800万:
select count(*)
from FTTH_AMS_DEVICE_METRICS DAT
where TRUNC(DAT.COLLECTION_TMS) > TO_DATE('10-14-2016', 'MM-DD-YYYY') and
TRUNC(DAT.COLLECTION_TMS) <= TO_DATE('10-16-2016', 'MM-DD-YYYY');
如果是这种情况,那么只需确定两列的完整值并使用:
select to_char(start_dt, 'YYYY-MM-DD HH24:MI:SS'),
to_char(end_dt, 'YYYY-MM-DD HH24:MI:SS')
from ETL_JOB_CONTROL;