我们使用4-4-5会计期间。如果你对此不熟悉,你可以在Wikipedia上找到相关信息。
为此,我创建了一个日期表,其中包含未来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)我的大多数数据库使用的是SQL2000,所以我的日期都是日期时间字段。
有没有更有效的方法来实现这一点?这是我可以使用的最好的查询模板吗?将日期转换为日期时间的其他方法呢?有没有更快的方法来做到这一点?
发布于 2009-08-26 20:31:12
我使用了将datetime的日期部分提取到持久化计算字段(可能是已索引的)中,并在计算字段(仅限日期)上执行所有连接和搜索。实际上,您在2k8之前的版本中拥有了2k8的新DATE类型,代价是8字节(如果您愿意将其存储为int,甚至可以是4字节)。优点是datetimes仅按日期部分进行SARGability。
https://stackoverflow.com/questions/1337207
复制相似问题