我希望在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)。?
答案 0 :(得分:2)
这是一种方法:
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)
答案 1 :(得分:1)
可以尝试这样的事情
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