2009-08-26 1 views
0

회계 기간 4-4-5를 사용합니다. 이 문제에 익숙하지 않은 경우 Wikipedia에서 정보를 찾을 수 있습니다.4-4-5 회계 기간은 나의 존재의 부채입니다.

이 작업을 수행하려면 다음 10 년 동안 모든 날짜가 포함 된 날짜 테이블을 만들었습니다. 나는 수정 한 스크립트 (here)를 사용했습니다.

내 테이블의 생성 스크립트는 다음과 같습니다

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입니다.

더 효율적인 방법이 있습니까? 이게 내가 사용할 수있는 최상의 쿼리 템플릿인가? Date to Date 시간을 변환하는 다른 방법은 어떻습니까? 그렇게하는 더 빠른 방법이 있습니까?

답변

3

나는 datetime의 날짜 부분을 지속 된 계산 된 필드 (어쩌면 색인 생성)로 추출하고 계산 된 필드 (날짜 만)에 대한 모든 조인과 검색을 사용했습니다. 사실상 2k8을 2k8보다 2k8 (또는 int으로 저장하려는 경우 4 바이트)의 비용으로 2k8의 새로운 DATE 유형을 사용하게됩니다. 장점은 날짜 부분의 SARGability뿐입니다.