這東西給自己留著用。
經常會用到一些查詢需要做全月統計,但有些時候的統計需要將未發生日期也顯示出來,因此會需要一個固定的日期表,(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')