0

テーブルに 882 行あり、列は (StartDate、EndDate、Capacity、PitchType_Skey、Site_Skey) であり、これらの行は 2010 年の日付に基づいています。2011 年に別の 882 行を挿入したいのですが、わかりませんこれを行う方法、お手伝いできますか。Insert ステートメントを開始しました。

INSERT INTO Cap1 (StartDate, EndDate, Capacity, PitchType_Skey, Site_Skey)

SELECT
Add 1 YEAR to StartDate,
Add 1 YEAR to EndDate,
Capacity,
Pitch_Type_Skey,
Site_Skey
FROM Cap1
WHERE YEAR StartDate = 2010

前もって感謝します

ウェイン

4

2 に答える 2

3

と が日付または日時のデータ型であると仮定すると、この関数を使用して、次のStartDateように年を 1 ずつ加算できます。EndDateDATEADD

INSERT INTO Cap1 (StartDate, EndDate, Capacity, PitchType_Skey, Site_Skey)

SELECT
  DATEADD(yy, 1, StartDate),
  DATEADD(yy, 1, EndDate),
  Capacity,
  Pitch_Type_Skey,
  Site_Skey
FROM Cap1
WHERE YEAR(StartDate) = 2010;

注意: @Bridge、@brykneval で指摘されているように、YEAR関数はsargableではないため、SQL Server オプティマイザーは関数内のそのフィールドのインデックスを使用できませんYEAR。パフォーマンスを向上させるには、述語BETWEEN, または<=,>=を代わりに使用してください。

于 2013-02-14T08:32:28.840 に答える
0
INSERT INTO Cap1 (StartDate, EndDate, Capacity, PitchType_Skey, Site_Skey)

                 SELECT
                     DateAdd(yy,1,StartDate),
                     DateAdd(yy, 1,EndDate),
                     Capacity,
                     Pitch_Type_Skey,
                     Site_Skey
                     FROM Cap1
                      WHERE YEAR(StartDate) = 2010
于 2013-02-14T08:34:54.987 に答える