【问题标题】:sql dates quater of specific yearsql日期特定年份的四分之一
【发布时间】:2017-02-16 14:40:38
【问题描述】:

我正在尝试创建一个报告,为我提供在特定日期的周、月和季度发生的事件的编号。
我已经能够这样做了好几个星期和几个月,但是季度有问题。我想要该特定年份的季度的结果 - 就像下面的示例中的 2016 年一样。

例如

declare @date date set @date = '2016/02/30'    

select case_id, event_date  
from #total  
WHERE datepart(quarter, event_DATE) = datepart(quarter, @date)   
order by 2   

当我使用此代码时,它不仅为我提供了 2016 年的结果,而且还为我提供了 2015、2014 年(前几年)的同一季度。

case_id         event_date  
1234        1986-02-06  
5567        2014-01-04   
3456       2015-03-11     
6378       2016-02-23    
4789        2016-02-06  
6782        2016-01-04   
2346       2016-03-11     
9098       2016-02-23  

我想要的:仅适用于 2016 年,而不是前几年。

case_id         event_date  
4789        2016-02-06  
6782        2016-01-04   
2346       2016-03-11     
9098       2016-02-23  

【问题讨论】:

  • 您还需要匹配DatePart(year, …)。 Q1等每年都会出现。
  • 虽然你一般都想avoid functions in your where clause。建立一个日期表和join
  • 感谢您的编辑。
  • @Richard 你能更清楚一点吗?谢谢

标签: sql sql-server date


【解决方案1】:

您可以尝试为年份添加条件:

[...] AND datepart(year, event_DATE) = datepart(year, @date)

你的查询看起来像

SELECT case_id, event_date  
FROM #total  
WHERE datepart(quarter, event_DATE) = datepart(quarter, @date)
AND datepart(year, event_DATE) = datepart(year, @date)
ORDER BY 2   

【讨论】:

    【解决方案2】:
    declare @date date set @date = '2016/02/30'    
    
    select case_id, event_date  
    from #total  
    WHERE datepart(quarter, event_DATE) = datepart(quarter, @date) 
    AND datepart(YYYY,event_DATE) = '2016'  
    order by 2   
    

    【讨论】:

    • 使用@nbouchet 建议的动态代码,比我那里做的要好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 2017-01-19
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    相关资源
    最近更新 更多