繁体   English   中英

在SQL Server中查找两个季度之间的记录?

[英]Find records between two Quarters in SQL Server?

我想查找SQL Server中不同年份的四分之二之间的记录。

SELECT    ('Q'+cast(DATEPART(QUARTER,calldate) as varchar(3))+'-'+cast(YEAR(calldate) as varchar(4)))
period,providerid,volume as volume,type  
FROM  table V    
where DATEPART(QUARTER,calldate) between @Q1 and @Q2 and                             
datepart(year,calldate) in (@Y1,@Y2)  and providerid=@carrierID  

这里Q1 = 4和Q2 = 3和@ Y1 = 2014,@ Y2 = 2016

 Now,I have only records from Q2-2016, So it should return available records      
 but I am getting blank rows.
 if I change the parameter like this 
 Here Q1=3 and Q2=4 and @Y1=2014,@Y2=2016 then i am getting records.

我想要这两个季度之间的所有记录,例如(Q3-2014和Q2-2016)。

这是一种方法:

where datename(year, calldate) + datename(quarter, calldate)
          between @Y1 + @Q1 and @Y2 + @Q2;

假设变量实际上是字符串。 您也可以使用数字:

where datepart(year, calldate) * 10 + datename(quarter, calldate)
          between @Y1 * 10 + @Q1 and @Y2 * 10 + @Q2;

并且,这是一种使用索引的方法:

where calldate >= datefromparts(@Y1, @Q1*3 - 2, 1) and
      calldate < (case when @Q2 = 4
                       then datefromparts(@Y2 + 1, 1, 1)
                       else datefromparts(@Y2, @Q2*3 - 2 + 3, 1)
                  end)

可以尝试这样的事情

SELECT    
 ('Q'+cast(DATEPART(QUARTER,calldate) as varchar(3))+'-'+cast(YEAR(calldate) as varchar(4)))
period,providerid,volume as volume,type  
FROM  table V    
where DATEPART(QUARTER,calldate) + datepart(year,calldate) *4  between @Q1 + @Y1 * 4  and @Q2 + @Y2 * 4 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM