SQL查询日历

 这东西给本身留着用。数据库

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

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

 

函数一:io

--支持SQL 2000方法

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

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

AS查询

BEGINdb

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

    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')

相关文章
相关标签/搜索