我需要确定SQL Server中给定日期的一个月中的天数.
有内置功能吗?如果没有,我应该使用什么作为用户定义的函数?
在SQL Server 2012中,您可以使用EOMONTH(Transact-SQL)来获取该月的最后一天,然后您可以使用DAY(Transact-SQL)来获取该月的天数.
DECLARE @ADate DATETIME SET @ADate = GETDATE() SELECT DAY(EOMONTH(@ADate)) AS DaysInMonth
您可以在指定月份的第一天使用以下内容:
datediff(day, @date, dateadd(month, 1, @date))
使其适用于每个日期:
datediff(day, dateadd(day, 1-day(@date), @date), dateadd(month, 1, dateadd(day, 1-day(@date), @date)))
最优雅的解决方案:适用于任何@DATE
DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,@DATE),0)))
把它扔进一个函数或只是内联使用它.这回答了原始问题,而没有其他答案中的所有额外垃圾.
其他答案的日期示例:
SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,'1/31/2009'),0)))
返回31
SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,'2404-feb-15'),0)))
返回29
SELECT DAY(DATEADD(DD,-1,DATEADD(MM,DATEDIFF(MM,-1,'2011-12-22'),0)))
返回31
更简单......试试 day(eomonth(@Date))
--Last Day of Previous Month SELECT DATEPART(day, DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE()),0))) --Last Day of Current Month SELECT DATEPART(day, DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+1,0))) --Last Day of Next Month SELECT DATEPART(day, DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,GETDATE())+2,0)))
就个人而言,如果没有内置函数,我会为它制作一个UDF ...
我会建议:
SELECT DAY(EOMONTH(GETDATE()))