如何在Oracle中查询每月的特定日期

时间:2016-06-22 13:44:03

标签: oracle

尝试自动化一个查询,该查询将为当月的日期(在日期字段中)提取数据> = 15。这可能吗?如果是这样,实现这个的语法是什么?

我希望每个月都能运行此查询,而无需更改任何内容。因此,在5月份,它会自动提取日期为> = 5/15/16的任何项目。在6月,它将拉出日期> = 6/15/16的项目。等等......

非常感谢任何帮助。感谢

3 个答案:

答案 0 :(得分:3)

这将允许您使用date_field列上的任何索引:

SELECT *
FROM   table_name
WHERE  date_field >= TRUNC( SYSDATE, 'MM' ) + INTERVAL '14' DAY
AND    date_field <  ADD_MONTHS( TRUNC( SYSDATE, 'MM' ), 1 );

答案 1 :(得分:1)

如果您的日期/时间字段属于时间戳类型,则可以执行

select x from <your_table>
where EXTRACT(DAY from <timestamp field>) >=15
and EXTRACT(MONTH from <timestamp field>) = EXTRACT(MONTH FROM CURRENT_TIMESTAMP)
and EXTRACT(YEAR from <timestamp field>)  = EXTRACT(YEAR FROM CURRENT_TIMESTAMP);

答案 2 :(得分:1)

我认为你所追求的是:

with sample_data as (select 1 id, to_date('01/06/2016', 'dd/mm/yyyy') dt from dual union all
                     select 2 id, to_date('10/06/2016', 'dd/mm/yyyy') dt from dual union all
                     select 3 id, to_date('14/06/2016', 'dd/mm/yyyy') dt from dual union all
                     select 4 id, to_date('15/06/2016', 'dd/mm/yyyy') dt from dual union all
                     select 5 id, to_date('16/06/2016', 'dd/mm/yyyy') dt from dual union all
                     select 6 id, to_date('30/06/2016', 'dd/mm/yyyy') dt from dual union all
                     select 7 id, to_date('01/07/2016', 'dd/mm/yyyy') dt from dual)
select *
from   sample_data
where  dt >= trunc(sysdate, 'mm') + 14
and    dt < last_day(trunc(sysdate)) + 1;

        ID DT        
---------- ----------
         4 15/06/2016
         5 16/06/2016
         6 30/06/2016

(如果您希望任何日期大于当前月份的15日的行,则删除where子句中的最后一个谓词。)