2011-01-06 12 views
0

日付が与えられた場合(@d = '11 -25-2010 ')、その日付から四半期の終わりをどうやって決めることができますか?私は深夜1秒前にタイムスタンプを使いたいです。四半期の日付が与えられた四半期の終わりを見つける方法

私はこれを取得することができます:

select dateadd(qq, datediff(qq, 0, getdate()), 0) as quarterStart 

私を与える:'10 -1-2010'

を、私は特定の日の真夜中前に1秒のためにこれを使用します。

select DateAdd(second, -1, DateAdd(day, DateDiff(day, 0, @d))+1, 0)) AS DayEnd 

最後に、quarterEndメソッドで'12 -31-2010 23:59:00 'となります

+0

この文脈では四分の一です。例えば、11-25-2010の入力として –

+1

と答えた場合、どの出力を期待していますか?http://ask.sqlservercentral.com/questions/6680/how-to-find-quarter-starting-date-and-end-日付 – Dave

+0

ありがとう、@デイブ。私はそのリンクに行きましたが、私は第3の解決策を見ていませんでした。それは私が探していたものです! (それはいつもあなたが見ている最後の場所にあります、それはありません?) – Ramy

答えて

2

私はそれを持っていると思います:

select DateAdd(second, -1, DateAdd(qq, DateDiff(qq, 0, getdatE())+1, 0)) 
0

ただ、その後の四半期の最初の日を見つけて、その日引く

select dateadd(second,-1, 
     dateadd(month,3, 
      dateadd(qq, datediff(quarter , 0 , current_timestamp) , 
      0 
      ) 
      ) 
     ) 
1
Select Dateadd(qq, datediff(qq, 0, getdate()), 0) as QuarterStart 
    , DateAdd(d, -1 
     , DateAdd(qq, 1 
      , dateadd(qq, datediff(qq, 0, getdate()), 0))) As QuarterEnd 

これを試してみてください。あなたが範囲のためにこれを使用している場合は、「より厳密に小さい」を使用し、一日substractません。明確にするため

MyDate >= Dateadd(qq, datediff(qq, 0, getdate()), 0) 
And MyDate < DateAdd(qq, 1 
       , dateadd(qq, datediff(qq, 0, getdate()), 0)) 
0

非常に冗長。基本的には直接的なアプローチです:

  • ゲット年
  • は、四半期の月の計算四半期に3ヶ月
  • があることを考慮すると、第4四半期
  • のための年を調整し、出力

をコンパイルします。コードは次のとおりです。

declare @current datetime 
set @current = '9-25-2010' 

declare @year int 
set @year = datepart(year, @current) 

declare @quartermonth int 
select @quartermonth = ((datepart(month, @current) - 1)/ 3 + 1)* 3 + 1 -- go to the next month 

select @year, @quartermonth 

-- adjust year if it's 4th quater 
select @year = @year + @quartermonth/12 

-- avoid month overflow 
select @quartermonth = @quartermonth % 12 

select @year, @quartermonth 


declare @firstdayofnextquater datetime 
select @firstdayofnextquater = convert(datetime, convert(varchar, @year) + '-' + convert(varchar, @quartermonth) + '-01') 

select dateadd(second, -1, @firstdayofnextquater) 
+0

Gosh ..最終版を置くために編集の束を取った... – Schultz9999

関連する問題