4

クエリがあり、パラメータを追加して移動年次 (過去 12 か月の数値) を計算したいと考えています。今日から 12 か月を差し引こうとしているので、たとえば今日が 2012 年 8 月 1 日の場合、@StartDate は「2011-09-01」、@​​EndDate は「2012-08-31」になります。では、これに対応するためにパラメータの設定を変更するにはどうすればよいでしょうか?

declare @StartDate DATE
declare @EndDate   DATE
SET @StartDate = DATEADD(MONTH, -12, '2012-08-01')
SET @EndDate = DATEADD(MONTH, +1, '2012-08-01')
4

4 に答える 4

5
DECLARE
  @InputDate DATE,
  @StartDate DATE,
  @EndDate   DATE

SET
  @InputDate = '2012-08-01'

SET
  @StartDate = DATEADD(MONTH, DATEDIFF(MONTH, 0, @InputDate) - 11, 0)

SET
  @EndDate   = DATEADD(DAY, -1, DATEADD(MONTH, 12, @StartDate))

編集:

ただし、1年を表すためにtoを使用することはお勧めしません。代わりに、次のように使用してください...'2011-09-01''2012-08-31''2011-09-01''2012-09-01'

WHERE
      table.dateField >= '2011-09-01'
  AND table.dateField <  '2012-09-01'

これは、すべてのDateおよびDateTimeデータ型で機能します。の値がdateField8月31日の午後2時30分であっても、これは機能します。これは、すべてのアプローチに適合する1つのサイズであり、日付と時刻の境界で間違いを犯すことをはるかに困難にします。

于 2012-08-01T13:11:31.203 に答える
0

tiisを試してください:

declare @Date DATE='2012-08-05'
select convert(date,DateAdd(Month, DateDiff(Month, 0, @Date)-11,0)) StartDate ,
                       convert(date,DateAdd(day,-1,DateAdd(Month,1,
                       DateAdd(Month, DateDiff(Month, 0, @Date),0)))) EndDate

結果:

StartDate       EndDate
2011-09-01  2012-08-31
于 2012-08-01T13:11:41.587 に答える
0

これを最後の SET コマンドの後に追加します。

SET @EndDate = DATEADD(DAY, -1, @EndDate)

または、2 番目の SET を次のように置き換えます。

SET @EndDate = DATEADD(DAY, -1,DATEADD(MONTH, +1, '2012-08-01'))
于 2012-08-01T13:08:26.037 に答える