我想编写一个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
答案 0 :(得分:0)
EOMONTH
将为您提供指定日期的月份的最后一天。
SELECT EOMONTH ( GetDate() ) AS Result;
所以这将给您04/30/2019。
您实际上并不需要为此创建用户定义的函数,因为已经EOMONTH
可以做到这一点。
答案 1 :(得分:0)
功能1 ,其中以year
和month
作为输入,
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