2

カレンダーに基づいて、このクエリで月を増やす SQL クエリが必要です。システム カレンダーが新しい月に変わると、when句の日付文字列も変更する必要があります。

UPDATE dbo.dim_time
SET last12 =
CASE
    WHEN date < '2012-09-01' THEN 'No'
    ELSE 'Yes'
END

今月は でしたdate < '2012-09-01'

翌月は自動的に に変わりdate < '2012-10-01'ます。

4

8 に答える 8

1

毎月更新し続ける必要がないように、おそらく計算列を使用する方が良いと思います。

create table #DimDate
([date] Date, last12 varchar(5))

INSERT INTO #DimDate
SELECT dateAdd(m, X.c, getdate()), 'No'
FROM  
(Values (-1),(-2),(-3),(-4),(-5),(-6),(-7),(-8),(-9),(-10),(-11),(-12),(-13),(-14),(-15),(-16))  AS X(c)


ALTER TABLE #DimDate
DROP COLUMN last12

ALTER TABLE #DimDate
ADD  last12 AS Case When DateDiff(m,date,getdate())>12 then 'No' Else 'Yes' End


SELECT *
FROM #DimDate
于 2015-06-04T08:45:08.540 に答える
1

日付文字列を式に置き換える必要があります。この式は、現在の月の最初の日を示します。

dateadd(month, datediff(month,0,GETDATE()), 0)

2012-09-01 は当月から 34 か月前なので、当月の開始前の 34 か月を次のように計算できます。

dateadd(month, datediff(month,0,GETDATE()) - 34, 0)

したがって、更新ステートメントは次のようになります。

Update dbo.dim_time
Set last12 =
Case When date < dateadd(month, datediff(month,0,GETDATE()) - 34, 0) then 
    'No'
Else 
    'Yes'
End
于 2015-07-02T14:55:29.597 に答える
1

使用するDATEDIFF

Update dbo.dim_time
Set last12 = Case When DateDiff(m,date,getdate())>12 then 'No' Else 'Yes' End
于 2013-09-23T10:38:07.663 に答える
1

MS SQL Server 2012 を使用している場合は、次の関数で日付を作成できます

  • DateFromParts - 指定された年、月、日の日付値を返します。
  • GetDate - 現在の DateTime を返します
  • Month - DateTime の月の部分を返します
  • Year - DateTime の年の部分を返します

例えば

Update dbo.dim_time
Set last12 =
Case
When date < DATEFROMPARTS(year(getdate())-1, month(getdate()),1) then 'No'
Else 'Yes'
End
于 2013-09-23T10:52:54.690 に答える