Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 查询如何仅从特定学年选择日期?_Sql_Oracle - Fatal编程技术网

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

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

这可能很简单,但我无法找到正确且最简单的方法来查询包含日期列的表,以返回日期属于当前学年的行

要知道,就学年而言,我指的是从一年的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
您可以使用案例将日期转换为其学年。对于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');