有人可以验证这个功能吗

时间:2012-11-26 08:35:44

标签: sql sql-server

很抱歉打扰你们。我的任务是在客户端进行一些代码审查,发给我的笔记本电脑没有安装SQL。当我在等待安装发生时,想要忙着查看代码并遇​​到这个宝石

CREATE FUNCTION [dbo].[Uf_GetTotalDaysInMonth]
(
    -- Add the parameters for the function here
    @anydateofMonth datetime
)
RETURNS int
AS
BEGIN
    -- Declare the return variable here
    DECLARE @totalDaysInMonth int
    -- Add the T-SQL statements to compute the return value here

        DECLARE @givendate datetime
        SET @givendate = STR(Year(@givendate)) + '-' + STR(Month(@givendate) + 1) + '-01' 

        select @totalDaysInMonth = datepart(dd, dateadd(day, -1, @givendate))

    -- Return the result of the function
    RETURN @totalDaysInMonth

END

忽略使用不必要的额外变量,我相信这个功能将在12月崩溃

STR(Month(@givendate) + 1)

将评估为13并且将超出范围日期错误。有人可以帮我验证一下吗?

2 个答案:

答案 0 :(得分:1)

当你通过@anydateofMonth 12月日期时,你会在函数中获得错误。 你可以用这个:

CREATE FUNCTION [dbo].[Uf_GetTotalDaysInMonth]
(
    -- Add the parameters for the function here
    @anydateofMonth datetime
)
RETURNS int
AS
 BEGIN
    DECLARE @nextMonth datetime
    SET @nextMonth = dateadd(m, 1, @anydateofMonth)
    RETURN (SELECT Day(dateadd(d, -Day(@nextMonth), @nextMonth)))
  END

答案 1 :(得分:0)

http://sqlfiddle.com/#!6/185c9/7

SQL Fiddle没有错误,只有13作为输出