到目前为止,数字转换会影响oracle

时间:2017-09-12 13:13:03

标签: oracle performance date type-conversion

我在下面查询DT_ID是数字数据类型列的位置,此列中存储的值是'YYYYMMDD'格式的日期。

在我的下面的查询中,我希望从周一到周日获取每周报告的前一周数据,此查询的工作速度非常快。

select  ID,NAME
from TEST_REPORT
where 
DT_ID between 20170904 and 20170910;

但这是硬编码的日期,我想让它变得动态。我尝试了这个查询:

select  ID,NAME
from TEST_REPORT
where 
DT_ID>= next_day(trunc(sysdate), 'MONDAY') - 14 and
          DT_ID< next_day(trunc(sysdate), 'MONDAY') - 7;

但它给出了这个错误:

  

期待数字并获得日期

当我将此数字转换为如下所示的日期时查询它会导致很多性能问题。还有其他方法可以让它以更好的性能变得动态吗?

select  ID,NAME
from TEST_REPORT
where 
to_date(DT_ID,'YYYYMMDD') >= next_day(trunc(sysdate), 'MONDAY') - 14 and
          (DT_ID,'YYYYMMDD') < next_day(trunc(sysdate), 'MONDAY') - 7;

1 个答案:

答案 0 :(得分:3)

您可以将日期值转换为字符串,然后转换为数字:

select  ID,NAME
from TEST_REPORT
where DT_ID >= to_number (to_char (next_day(trunc(sysdate), 'MONDAY') - 14,
                           'YYYYMMDD'))
  and DT_ID < to_number (to_char (next_day(trunc(sysdate), 'MONDAY') - 7,
                           'YYYYMMDD'));