很抱歉打扰你们。我的任务是在客户端进行一些代码审查,发给我的笔记本电脑没有安装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并且将超出范围日期错误。有人可以帮我验证一下吗?
答案 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作为输出