当我使用oracle date时有两个结果

时间:2016-10-18 00:30:56

标签: sql oracle

我在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是日期时间。

如果您需要更多相关信息,我会立即分享。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

如果日期与您显示的完全相同,那么在第二个查询中,您应该> to_date ('10-15-2016', 'mm-dd-yyyy') and <= to_date('10-16-2016', 'mm-dd-yyyy')。你正在比较错误的日期。

答案 1 :(得分:0)

以下是猜测,知情猜测。 Oracle中的date数据类型支持时间组件。但是,当您打印日期时,通常会删除时间组件。

我猜测start_dt中的end_dtETL_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;