2009-08-26 7 views
0

Nous utilisons 4-4-5 périodes comptables. Si vous n'êtes pas familier avec cela, vous pouvez trouver des informations au Wikipedia. Pour ce faire, j'ai créé une table avec tous les jours pour les 10 prochaines années. J'ai utilisé le script (quoique modifié) trouvé here.4-4-5 Les périodes comptables sont le fléau de mon existence

Le script de création de ma table est:

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 

La période est mon 4-4-5 "mois".

Je lien généralement mes questions à lui avec le modèle suivant j'ai créé:

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) 

La plupart de mon utilisation de la base de données est SQL 2000 si mes dates sont tous les champs datetime.

Existe-t-il un moyen plus efficace d'accomplir ceci? Est-ce le meilleur modèle de requête que je pourrais utiliser? Qu'en est-il d'autres façons de convertir l'heure de la date en date? Y a-t-il des moyens plus rapides de le faire?

Répondre

3

J'ai utilisé l'extraction de la partie date de la datetime dans un champ calculé persistant (peut-être indexé) et fait toutes les jointures et recherches dans le champ calculé (date seulement). En effet, vous auriez le type 2k8 nouveau DATE en pré-2k8, au détriment de 8 octets (ou même 4 octets si vous êtes prêt à le stocker comme). Les avantages sont SARGability de datetimes par seulement la partie de date.