【发布时间】:2011-09-01 19:14:38
【问题描述】:
我需要创建一个包含日期范围的临时表,以及几个包含占位符值 (0) 的列以供将来使用。我需要的日期是 $startDate 和 $endDate 之间的每个月的第一天,其中这些变量可能相隔数年。
我原来的sql语句是这样的:
select dbo.FirstOfMonth(InsertDate) as Month, 0 as Trials, 0 as Sales
into #dates
from customer
group by dbo.FirstOfMonth(InsertDate)
“FirstOfMonth”是我创建的一个用户定义的函数,它几乎按照它所说的那样,返回所提供日期的月份的第一天,时间正好是午夜。
这几乎完全符合我的需要,直到我发现我的日期偶尔会有几个月的空白,因为没有记录插入日期。由于我的结果必须仍然缺少月份,因此我需要一种不同的方法。
我已将以下声明添加到存储过程中,以预测它们对我需要的日期范围的需求...
declare $startDate set $startDate = select min(InsertDate) from customer
declare $endDate set $endDate = select max(InsertDate) from customer
...但我不知道从这里做什么。
我知道这个问题是similar to this question,但坦率地说,这个答案超出了我的想象(我不经常使用 SQL,而且当我使用 SQL Server 时,它往往是在旧版本的 SQL Server 上)并且有一个一些让我失望的细微差别。
【问题讨论】:
-
使用 MASTER.dbo.SPT_VALUES 获取数字列表,并使用 DATEADD 将其转换为 DATETIMEs
标签: sql tsql stored-procedures sql-server-2000