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

我已经使用将日期时间的日期部分提取到持久计算字段(可能是索引)中,并对计算字段进行所有连接和搜索(仅限日期)。实际上,您将DATE在 pre-2k8 中拥有 2k8 新类型,代价是 8 个字节(如果您愿意将其存储为 4 个字节,甚至可以使用 4 个字节int)。优点是仅按日期部分对日期时间进行 SARGability。

于 2009-08-26T20:31:11.600 回答