【问题标题】:SQL Date Range from current year从当年开始的 SQL 日期范围
【发布时间】:2015-04-20 21:52:57
【问题描述】:

我需要在 SSMS 上的 SQL 中创建一个函数来获取与某个日期范围(从一年的 9-1 到明年的 8-31)相关的列的总和。问题是这个日期范围每年都会改变。

我知道如何用 SQL 编码:

Create View DateRangeRDView AS
Select RD1, RD2, RD3, RD4
From SomeTable
Where  PerformanceDate BETWEEN '20140901' AND '20150831'

但是当视图中的日期范围需要更改为BETWEEN '20150901' AND '20160831'时,我必须创建一个全新的视图。

我也知道GetDate() 获取当前日期,但我不确定如何实施它来帮助这里。有没有这样做GetDate()将能够检查它是否过去09-01而不声明年份然后如果它过去09-01SELECT between 09-01-CURRENTYEAR and 08-31-NEXTYEAR或者它在09-01SELECT between 09-01-LASTYEAR and 08-31-CURRENTYEAR之前?这将始终与此特定视图/查询中的当前年份有关

【问题讨论】:

  • 何时将日期更改为 2015-2016?
  • 您使用的是哪个 DBMS? (“SQL”不是 DBMS 产品的名称——它是一种查询语言)
  • 听起来像财政年度数据。在这种情况下,带有适当字段的日历表将极大地简化此任务。
  • SSMS 是 DBMS,我会编辑问题

标签: sql datetime subquery date-range getdate


【解决方案1】:

如果这是 Sql Server,那么我认为这会有所帮助:

where PerformanceDate between
  case when month(getdate())>=9 
       then cast(year(getdate()) as char(4)) + '0901' 
       else cast(year(getdate())-1 as char(4))+ '0901' end
and
  case when month(getdate())>=9 
       then cast(year(getdate())+1 as char(4)) + '0901' 
       else cast(year(getdate()) as char(4))+ '0901' end

【讨论】:

  • 这看起来可行,谢谢。只是为了澄清一下,你最后也有'0901',是不是包括最终值?就像“firstValue 和 secondValue 之间的等等”是否等同于“(blah >= firstValue && blah
  • @Davidp04,不,包括两端,如果不是您想要的,那么只需在 >= 和
  • 好的,我会在第二种情况下对 '0831' 做同样的事情。非常感谢!
【解决方案2】:

我猜你正在使用 SQL Server(基于日期格式和对 getdate() 的引用:

Create View DateRangeRDView AS
    Select RD1, RD2, RD3, RD4
    From SomeTable
    Where  PerformanceDate BETWEEN cast(datepart(year, getdate()) + '0901' as date) AND 
                                   cast(datepart(year, dateadd(year, 1, getdate())) + '0831' as date)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多