我要寻找的是开始和结束日期,我想返回不在数据集中的日期。例如,假设我要返回2018年1月,则返回所有不在列表中的日期。
对于给定的查询:
select distinct to_date(date_field, 'dd-mon-yyyy') from tbl_main where date_field >= '01-JAN-2018' and date_field <= '31-JAN-2018'
结果:
02-JAN-2018
05-JAN-2018
现在我可以查询列出一月的某天:
select to_date('01.01.2018','dd-mm-yyyy')+level-1 as dt
from dual
connect by level <= TO_CHAR(LAST_DAY(to_date('01.01.2018','dd.mm.yyyy')),'DD')
结果:
01-JAN-18
02-JAN-18
...
31-JAN-18
因此,基于此,我尝试运行以下无效的代码:
select dt from(
select to_date('01.01.2018','dd-mm-yyyy')+level-1 as dt
from dual
connect by level <=
TO_CHAR(LAST_DAY(to_date('01.01.2018','dd.mm.yyyy')),'DD'))
where dt not in (select distinct to_date(date_field, 'dd.mm.yyyy') from
tbl_main where date_field >= '01-JAN-2018' and x_datetime_insert <= '01-JAN-
2018') order by dt
基于个别返回的运行查询,我觉得上述查询应该可以工作。为了清楚起见,我希望结果将是一月中除以下日期以外的所有日期:
02-JAN-2018
05-JAN-2018
预期结果:
01-JAN-2018
03-JAN-2018
04-JAN-2018
06-JAN-2018
...
31-JAN-2018
任何帮助将不胜感激,并在此先感谢。
答案 0 :(得分:1)
尝试一下
select to_date('01.01.2018','dd.mm.yyyy')+level-1 as dt
from dual
connect by level <= TO_CHAR(LAST_DAY(to_date('01.01.2018','dd.mm.yyyy')),'DD')
minus
select to_date(date_field, 'dd.mm.yyyy')
from tbl_main
where date_field >= '01-JAN-2018'
and x_datetime_insert <= '01-JAN-2018'
order by dt
答案 1 :(得分:0)
问题是我使用的是yyyy而不是yy。一旦我改变了,我就得到了预期的结果。将来会为尝试解决类似问题的任何人留下职位。