0

システムにポリシーがあります

PolRef       Start            End
POL123     22/11/2012      23/12/2014
POL212     24/09/2012      23/10/2012
POL214     23/08/2012      29/09/2012

ユーザーにレポートの日付を尋ねています。ユーザーは2012年10月24日を入力します。@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)

これにより、2012年1月10日と2012年12月31日になります。基本的に、この四半期にあるポリシーのみを戻すためのスクリプトが必要です。ポリシーは、四半期の日付範囲全体にまたがる必要はなく、四半期の日付範囲に存在するだけです。

期待される結果は

PolRef       Start            End
POL123     22/11/2012      23/12/2014
POL212     24/09/2012      23/10/2012

Pol123は、四半期の日付範囲にまたがっているために表示されます。Pol212は、その四半期の日付範囲で期限切れになるため、そこにあります。Pol214は、この四半期にまたがったり、期限切れになったり、開始したりしないため、表示されません。

どんな助けでも大歓迎です

4

4 に答える 4

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]
于 2012-10-25T10:59:43.653 に答える
0

あなたはこれを試すことができます

select * from policies where start>=@quarterStartDate
 and end<=@quarterenddate
于 2012-10-25T10:57:37.933 に答える
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))
于 2012-10-25T10:57:56.613 に答える
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))
于 2012-10-25T10:57:57.840 に答える