這東西給本身留着用。數據庫
常常會用到一些查詢須要作全月統計,但有些時候的統計須要將未發生日期也顯示出來,所以會須要一個固定的日期表,(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')