取得某月的天數 SQL Function

取得某月的天數 SQL Function

以下分享2個SQL Server的Function

以下是加上一個月再去減一天然後取出來!


/****************************************************************************************
'程式代號:fnGetLastDayOfMonth
'程式名稱:Get Last Day Of Month
'目  的:Get Last Day Of Month
'參數說明:@YM=西元年月(2010/01)
'傳回值 :INT:該年月的日數
'副作用 :無
'備 註 :所有參數皆必需傳入
'範 例 :SELECT dbo.fnGetLastDayOfMonth('2010/02')        回傳值:28
****************************************************************************************/
(@YM VARCHAR(12))
RETURNS INT
BEGIN
    DECLARE @YMDATE VARCHAR(12)
    SET @YMDATE = @YM + '/01'
    DECLARE @RETURN INT
    SET @RETURN = DATEPART(DAY, 
        DATEADD(DAY, -1, 
        DATEADD(MONTH, 1, CAST(@YMDATE AS DATETIME))))
    RETURN @RETURN
END

 

以下是直接判斷那一月,2月再額外處理


/****************************************************************************************
'程式代號:fnGetLastDayOfMonth2
'程式名稱:Get Last Day Of Month
'目  的:Get Last Day Of Month
'參數說明:@YM=西元年月(2010/01)
'傳回值 :INT:該年月的日數
'副作用 :無
'備 註 :所有參數皆必需傳入
'範 例 :SELECT dbo.fnGetLastDayOfMonth2('2010/02')        回傳值:28
****************************************************************************************/
(@YM VARCHAR(12))
RETURNS INT
BEGIN
    DECLARE @YMDATE DATETIME
    SET @YMDATE = CAST(@YM + '/01' AS DATETIME)
    DECLARE @RETURN INT
    SELECT  @RETURN = (CASE   MONTH(@YMDATE)
                WHEN 1 THEN 31
                WHEN 2 THEN (CASE YEAR(@YMDATE)%4 
                                    WHEN 0 THEN 29 ELSE 28 END)
                WHEN 3 THEN 31
                WHEN 4 THEN 30
                WHEN 5 THEN 31
                WHEN 6 THEN 30
                WHEN 7 THEN 31
                WHEN 8 THEN 31
                WHEN 9 THEN 30
                WHEN 10 THEN 31
                WHEN 11 THEN 30
                WHEN 12 THEN 31
        END)
    RETURN @RETURN
END