如何创建用户可以输入自动查找月份的最后一天的年份和月份的功能?

时间:2019-04-25 20:50:33

标签: tsql

我想编写一个sql函数,其中用户有一个文本框来输入数据,而USER可以输入年份和月份以查找月份的最后一天。 我已经写了这个查询,但是它只返回当前月份的最后一天。

CreateFunction [dbo].[Date]()
Returns int
AS
BEGIN 
DECLARE @aint

   set @a=  CAST( Convert(VARCHAR(10), EOMONTH(DateADD(d, -1, GETDATE())),112) As int )
Return @a
End

3 个答案:

答案 0 :(得分:0)

EOMONTH将为您提供指定日期的月份的最后一天。

SELECT EOMONTH ( GetDate() ) AS Result; 

所以这将给您04/30/2019。

您实际上并不需要为此创建用户定义的函数,因为已经EOMONTH可以做到这一点。

答案 1 :(得分:0)

功能1 ,其中以yearmonth作为输入,

create function [dbo].[udf_getEOM_day](@year as int, @month as int)
returns int
AS
BEGIN 
   return day(eomonth(datefromparts(@year,@month,01)))
END
GO

test1 确定。

select dbo.udf_getEOM_day(_year,_month) from (values(1991,01)) as t(_year,_month)

功能2 ,其中以date作为输入,

create function [dbo].[udf_getEOM](@date as date)
returns int
AS
BEGIN 
   return day(eomonth(@date))
END
GO

test2 确定。

select dbo.udf_getEOM(_date) from (values(cast( '1991-01-21' as date))) as t(_date)

请注意,您可以更改功能名称。我建议在udf_之前加user defined functions

答案 2 :(得分:0)

您的函数仅返回当月的最后日期,这是因为您使用的getdate()函数将给您当前日期,而EOMONTH将给您当前月的最后日期。

要解决此问题,请将parameter添加到该函数中,以将用户输入传递给该函数,您将获得该月的最后一天。

功能

Create Function [dbo].[Date](@dt date)
Returns int
AS
BEGIN 
DECLARE @a int  

   set @a=  day( EOMONTH( DateADD(d, -1, @dt)))
Return @a
End

查询

select [dbo].[Date]('01/05/2019')

输出

-----------
31