Мы используем 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, поэтому все мои даты - это поля даты и времени.
Есть ли более эффективный способ сделать это? Это лучший шаблон запроса, который я мог использовать? А как насчет других способов конвертировать дату в дату? Есть ли более быстрые способы сделать это?