65.9K
CodeProject 正在变化。 阅读更多。
Home

获取一个月所有日期的表

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.33/5 (3投票s)

2008 年 3 月 7 日

CPOL
viewsIcon

34277

这个 SQL Server 2005 表值函数返回一个包含给定日期所在月份所有日期的表。

引言

在执行不同的连接操作时,通常需要一个包含特定月份所有日期的表。

这是一个适用于 SQL Server 2005 的表值函数,用于创建这样的表。

使用代码

函数 "getFullmonth" 的代码如下所示:

-- =============================================
-- Description: Returns a table containing all dates in the month of the specified date
-- =============================================
ALTER FUNCTION [dbo].[getFullmonth]
(
 @date1 datetime
)
RETURNS @dates TABLE 
(
 date datetime not null 
)
AS
BEGIN
 -- Set first day in month
 DECLARE @month int;
 
 SET @month = datepart(MM, @date1);
 SET @date1 = convert(datetime, convert(varchar,datepart(yy,@date1)) + '.' + convert(varchar,@month) + '.01 00:00:00');
 WHILE datepart(MM,@date1) = @month
 BEGIN
  INSERT INTO @dates VALUES (@date1);
  SET @date1 = dateadd(dd, 1, @date1);
 END 
 RETURN;
END                      

创建函数后,可以像这样在不同的查询中使用它:

SELECT a.date, b.holidayname 
FROM dbo.getFullmonth(getdate()) a 
LEFT OUTER JOIN holiday b on a.date = b.holidaydate
ORDER BY 1, 2

如果上面的表 "holiday" 包含所有公共假日,结果将显示整个月份以及当前月份的假日名称。

关注点

相同的原理也可以用于返回一周中的所有日期数字。

祝您编码愉快!

历史

版本 1.0

获取一个包含一个月中所有日期的表 - CodeProject - 代码之家
© . All rights reserved.