这可能很简单,但我无法弄清楚查询包含日期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
谢谢你的时间!
答案 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)
答案 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');