Eve*_*ien 86 sql sql-server datetime date user-defined-functions
我需要确定SQL Server中给定日期的一个月中的天数.
有内置功能吗?如果没有,我应该使用什么作为用户定义的函数?
Mik*_*son 136
在SQL Server 2012中,您可以使用EOMONTH(Transact-SQL)来获取该月的最后一天,然后您可以使用DAY(Transact-SQL)来获取该月的天数.
DECLARE @ADate DATETIME
SET @ADate = GETDATE()
SELECT DAY(EOMONTH(@ADate)) AS DaysInMonth
Meh*_*ari 113
您可以在指定月份的第一天使用以下内容:
datediff(day, @date, dateadd(month, 1, @date))
使其适用于每个日期:
datediff(day, dateadd(day, 1-day(@date), @date),
              dateadd(month, 1, dateadd(day, 1-day(@date), @date)))
Dan*_*vis 23
最优雅的解决方案:适用于任何@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
Bri*_*edt 11
--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 ...
小智 6
我会建议:
SELECT DAY(EOMONTH(GETDATE()))