2009-08-26 8 views
0

Wir verwenden 4-4-5 Accounting Periods. Falls Sie nicht damit vertraut sind, finden Sie Informationen unter Wikipedia.4-4-5 Accounting-Perioden sind der Fluch meiner Existenz

Um dies zu erreichen, habe ich eine Datumstabelle mit allen Tagen für die nächsten 10 Jahre erstellt. Ich habe das Skript (wenn auch modifiziert) gefunden here.

Die Schaffung Skript für meinen Tisch ist:

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 

Die Zeit ist mein 4-4-5 "Monat".

verbinde ich normalerweise meine Fragen, um es mit der folgenden Vorlage I erstellt:

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) 

Die meisten meiner Datenbanknutzung ist SQL 2000 so meine Daten alle Datetime-Felder sind.

Gibt es einen effizienteren Weg, dies zu erreichen? Ist das die beste Abfragevorlage, die ich verwenden könnte? Was ist mit anderen Möglichkeiten zum Konvertieren von Date to Date? Gibt es schnellere Möglichkeiten?

Antwort

3

Ich habe das Extrahieren des Datumsteils von datetime in ein permanentes berechnetes Feld (möglicherweise indiziert) und alle Joins und Suchen für das berechnete Feld (nur Datum) verwendet. In der Tat haben Sie die 2k8 neue DATE geben Sie in-2k8, auf Kosten von 8 Bytes (oder sogar 4 Bytes, wenn Sie bereit sind, es als int speichern). Die Vorteile sind SARGability von Datumsangaben nur durch Datumsteil.