这东西给本身留着用。数据库
常常会用到一些查询须要作全月统计,但有些时候的统计须要将未发生日期也显示出来,所以会须要一个固定的日期表,(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')