SQL查询日历

 这东西给自己留着用。

经常会用到一些查询需要做全月统计,但有些时候的统计需要将未发生日期也显示出来,因此会需要一个固定的日期表,(T6的自定义查询估计也是需要的,至少以前是这样)

下面写两种方法来获取指定月份的日期表,第一种适用SQL 2000及以上版本的数据库,第二种只适用SQL 2005及以上版本数据库

 

函数一:

--支持SQL 2000

CREATE FUNCTION dbo.GetCalendar(@Begin NVARCHAR(30))

RETURNS @rst TABLE(dDate SMALLDATETIME,iDx int IDENTITY(1,1) NOT NULL)

AS

BEGIN

    IF ISNULL(@Begin,'')='' RETURN

    INSERT INTO @rst

    SELECT TOP (DATEDIFF(DAY,@Begin,DATEADD(MONTH,1,@Begin)-1)+1) @Begin

    FROM syscolumns

   

    UPDATE @rst SET dDate=dDate+iDx-1  

    RETURN

END

GO

 

使用方法:

SELECT * FROM dbo.GetCalendar('2015-6-1') 

 

函数二:

--需要ROW_NUMBER函数的支持,支持SQL 2005及以上版本数据库

CREATE FUNCTION dbo.GetCalendar2005(@Begin NVARCHAR(30))

RETURNS @rst TABLE(dDate SMALLDATETIME)

AS

BEGIN

    INSERT INTO @rst

   SELECT TOP (DATEDIFF(DAY,@Begin,DATEADD(MONTH,1,@Begin)-1)+1) CAST(@Begin AS SMALLDATETIME)-1+ROW_NUMBER() OVER(ORDER BY ID)

    FROM

    syscolumns

    RETURN

END

GO

使用方法:

SELECT * FROM dbo. GetCalendar2005('2015-6-1') 

原文地址:https://www.cnblogs.com/pvistely/p/4851838.html