获取一个月所有日期的表
这个 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