SQL查詢日曆

Pvistely發表於2015-10-02

 這東西給自己留著用。

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

 

相關文章