Sql 查询如何仅从特定学年选择日期?
这可能很简单,但我无法找到正确且最简单的方法来查询包含日期列的表,以返回日期属于当前学年的行 要知道,就学年而言,我指的是从一年的9月1日到下一学年的8月31日,您如何获得正确的数据集 从如下所示的表格中:Sql 查询如何仅从特定学年选择日期?,sql,oracle,Sql,Oracle,这可能很简单,但我无法找到正确且最简单的方法来查询包含日期列的表,以返回日期属于当前学年的行 要知道,就学年而言,我指的是从一年的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 <- 2
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
您可以使用案例将日期转换为其学年。对于SQL Server,这可能看起来像:
select *
from YourTable
where case
when month(DateColumn) < 9 then year(DateColumn) - 1
else year(DateColumn)
end = year(getdate())
这是一篇相当于安多玛的文章的甲骨文-
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)
Fiddle:最简单的方法是在等式两边加上四个月或减去八个月,然后提取年份:
SELECT * FROM mytable
WHERE EXTRACT(YEAR FROM ADD_MONTHS(mydate, 4)) = EXTRACT(YEAR FROM ADD_MONTHS(SYSDATE, 4));
或:
增加四个月==>将2015-09-01视为2016-01-01;减去八个月==>将2015-09-01视为2015-01-01。我可能遗漏了一些东西,但无论如何,如果是这么简单,我会发布:
select *
from dts
where dt between to_date('2015-09-01','YYYY-MM-DD')
and to_date('2016-08-31','YYYY-MM-DD');
这当然是where子句中要解决的问题。。。但是使用的逻辑是什么?我想应该是围绕系统日期工作的东西。。。但我不能确定正确的方向conditions@darkpirate:在这种情况下,您必须指定数据库管理系统Oracle、MySQL、SQL Server等。日期函数在它们之间非常接近。好的,也许我遗漏了什么。但我不确定年份或月份是否是oracle中的实际函数,我的意思是,所有关于to_date to_char函数的指南都将是愚蠢的,否则我发誓我发布了一条评论,说它是oracle db。。。该死,我很抱歉,不要工作,它只考虑当前的一年行,意味着上一年的SEC OCT月11日的排不是我的错,它是有效的。很难理解,你能解释一下引擎盖下发生了什么吗?假设extract确实做到了这一点,提取所需的信息片段,那么end=。。。是指?提取功能仅提取利息月、年等日期的一部分作为数字。case语句作为一个整体以case开头,以end结尾。之后,=只是一个普通的比较运算符,就像您通常在where子句中使用的那样。例如,请参见“选择”列表中哪一个包含这两个表达式。我给出的查询本质上比较了X和Y(在第二个示例中),并返回它们相同的位置。开始获取它时,我知道年底是年或年-1,这取决于when else station,但我不知道如何或更确切地说是何时将该值分配给它。您已经提供了足够的信息,所以我将自己查找。非常感谢先生,非常感谢!干杯还有一个问题,在我的过程中,有没有办法在本地保存此数据集,以便在提交查询后使用它?
select *
from dts
where dt between to_date('2015-09-01','YYYY-MM-DD')
and to_date('2016-08-31','YYYY-MM-DD');