我在下面查询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;
答案 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'));