查询如何仅选择特定学年的日期?

时间:2015-03-15 16:29:22

标签: sql oracle

这可能很简单,但我无法弄清楚查询包含日期col的tabe的正确和最简单的方法,以返回日期属于当前学年的行。 知道在学年我的意思是从一年的9月1日到下一个的8月31日,你怎么能获得正确的数据集 从一个看起来像这样的表:

TABLE
----
Date
----
12/08/2015
15/06/2015
01/09/2015 <-
07/10/2015 <-
09/11/2015 <-
21/12/2015 <-
15/01/2016 <-
18/03/2016 <-
28/04/2016 <-
29/06/2016 <-
30/07/2016 <-
12/09/2016
23/11/2016
谢谢你的时间!

4 个答案:

答案 0 :(得分:1)

您可以使用case将日期转换为其学年。对于SQL Server,可能如下所示:

select  *
from    YourTable
where   case 
        when month(DateColumn) < 9 then year(DateColumn) - 1
        else year(DateColumn)
        end = year(getdate())

答案 1 :(得分:1)

这是Oracle等同于Andomar的帖子 -

select
   *
from
   dts
where
   case
     when extract (month from dt) < 9 then extract (year from dt) - 1
       else extract (year from dt)
         end = extract (year from sysdate)

小提琴: http://sqlfiddle.com/#!4/75a16/1/0

答案 2 :(得分:0)

最简单的方法是从等式的两边添加四个月(减去八个月)并提取年份:

SELECT * FROM mytable
 WHERE EXTRACT(YEAR FROM ADD_MONTHS(mydate, 4)) = EXTRACT(YEAR FROM ADD_MONTHS(SYSDATE, 4));

或:

SELECT * FROM mytable
 WHERE TRUNC(ADD_MONTHS(my_date, 4), 'YEAR') = TRUNC(ADD_MONTHS(SYSDATE, 4), 'YEAR');

添加四个月==&gt;将2015-09-01视为2016-01-01;减去八个月==&gt;将2015-09-01视为2015-01-01

答案 3 :(得分:0)

我可能错过了一些东西,但无论如何我会发布以防这么简单:

select *
from dts
where dt between to_date('2015-09-01','YYYY-MM-DD') 
             and to_date('2016-08-31','YYYY-MM-DD');