我在系统中有政策
PolRef Start End
POL123 22/11/2012 23/12/2014
POL212 24/09/2012 23/10/2012
POL214 23/08/2012 29/09/2012
我要求用户报告日期,用户输入24/10/2012这变为@StartDate
由此我得出该月份的季度:
set @currentMonth = Month(@StartDate)
if @currentMonth = 1 or @currentMonth = 2 or @currentMonth = 3 begin set @startmonth = 1 set @endmonth = 3 end
if @currentMonth = 4 or @currentMonth = 5 or @currentMonth = 6 begin set @startmonth = 4 set @endmonth = 6 end
if @currentMonth = 7 or @currentMonth = 8 or @currentMonth = 9 begin set @startmonth = 7 set @endmonth = 9 end
if @currentMonth = 10 or @currentMonth = 11 or @currentMonth = 12 begin set @startmonth = 10 set @endmonth = 12 end
然后我得到一个日期范围:
@quarterStartDate = CAST(CAST(YEAR(@StartDate) AS varchar) + '-' + CAST(@startMonth AS varchar) + '-' + '01') AS Date)
@quarterEndDate = CAST(CAST(YEAR(@EcdDate) AS varchar) + '-' + CAST(@endMonth AS varchar) + '-' + '31') AS Date)
这将给我01-10-2012和31-12-2012。基本上我需要一个脚本才能恢复本季度的政策。该政策不必跨越整个季度日期范围,只存在于季度日期范围内。
预期的结果将是
PolRef Start End
POL123 22/11/2012 23/12/2014
POL212 24/09/2012 23/10/2012
出现Pol123因为它跨越季度日期范围。 Pol212存在,因为它在该季度日期范围内到期。 Pol214没有出现,因为它在本季度都没有跨越,到期或开始。
非常感谢任何帮助
答案 0 :(得分:3)
Select *
From policies
Where Start <= @quarterEndDate
And @quarterStartDate <= [End]
如果两个开始都在另一个开始之前,那么你有重叠(即存在于四分之一)
然而,我会删除变量并使用更准确的范围:
Select *
From policies
Where Start < dateadd(q,1+datediff(q,0,getdate()),0)
And dateadd(q,datediff(q,0,getdate()),0) <= [End]
答案 1 :(得分:0)
你可以试试这个
select * from policies where start>=@quarterStartDate
and end<=@quarterenddate
答案 2 :(得分:0)
select *
from policies
where
[Start] <= @quarterEndDate and
[End] >= @quarterStartDate
要查找季度的开始和结束,您可以使用
declare @date datetime, @quarterStartDate datetime, @quarterEndDate datetime
select @date = convert(datetime, convert(nvarchar(8), getdate(), 112), 112)
select @quarterStartDate = dateadd(qq, datepart(qq, @date) - 1, dateadd(dd, -datepart(dy, @date) + 1, @date))
select @quarterEndDate = dateadd(dd, -1, dateadd(mm, 3, @quarterStartDate))
答案 3 :(得分:0)
如果startdate和enddate是日期,而不是日期时间......
Select *
from policies
where StartDate<=@quarterenddate
and EndDate>=@quarterstartdate
您可能还会发现datepart(q,getdate())
有用。
计算季度开始和结束日期
select @quarterstartdate = convert(varchar(4),year(@d))+'-' + CONVERT(varchar(2),(DATEPART(Q,@d))*3-2)+'-1',
@quarterenddate= dateadd(day,-1,DATEADD(month,3, @quarterstartdate))