0

4-4-5 会計期間を採用しています。これに慣れていない場合は、Wikipediaで情報を見つけることができます。

これを達成するために、今後 10 年間のすべての日を含む日付テーブルを作成しました。ここにあるスクリプト (変更されていますが) を使用しまし

私のテーブルの作成スクリプトは次のとおりです。

USE [RedFridayDates];
GO
SET ANSI_NULLS ON;
GO
SET QUOTED_IDENTIFIER ON;
GO
CREATE TABLE [tblRedFridayAllDates] (
[DATE_ID] int NOT NULL,
[DATE] datetime NOT NULL,
[YEAR] smallint NOT NULL,
[MONTH] tinyint NOT NULL,
[DAY_OF_WEEK] tinyint NOT NULL,
[REDFRIDAY] bit NULL,
[Period] tinyint NULL,
[ForecastSales] money NULL)
ON [PRIMARY];
GO

期間は私の 4-4-5 の「月」です。

私は通常、作成した次のテンプレートを使用してクエリをリンクします。

SELECT RED.[YEAR] as [Year],
RED.PERIOD as [RF Period],

FROM TableName
  INNER JOIN REDFRIDAYDATES..TBLREDFRIDAYALLDATES RED
          ON RED.date =
             CAST (FLOOR (CAST (TableName.Date AS FLOAT)) AS DATETIME)

私のデータベース使用のほとんどは SQL 2000 であるため、日付はすべて日時フィールドです。

これを達成するためのより効率的な方法はありますか?これは私が使用できる最高のクエリ テンプレートですか? 日付を日付時刻に変換する他の方法はどうですか? そうするより速い方法はありますか?

4

1 に答える 1

3

日時の日付部分を永続化された計算フィールド (おそらくインデックス付き) に抽出し、計算フィールドですべての結合と検索を行いました (日付のみ)。事実上、2k8 より前の 2k8 の新しいDATE型は、8 バイト (または として保存する場合は 4 バイト) を犠牲にして作成されますint。利点は、日付部分のみによる日時の SARGability です。

于 2009-08-26T20:31:11.600 に答える