当前位置:  开发笔记 > 数据库 > 正文

如何确定SQL Server中一个月的天数?

如何解决《如何确定SQLServer中一个月的天数?》经验,为你挑选了6个好方法。

我需要确定SQL Server中给定日期的一个月中的天数.

有内置功能吗?如果没有,我应该使用什么作为用户定义的函数?



1> Mikael Eriks..:

在SQL Server 2012中,您可以使用EOMONTH(Transact-SQL)来获取该月的最后一天,然后您可以使用DAY(Transact-SQL)来获取该月的天数.

DECLARE @ADate DATETIME

SET @ADate = GETDATE()

SELECT DAY(EOMONTH(@ADate)) AS DaysInMonth



2> Mehrdad Afsh..:

您可以在指定月份的第一天使用以下内容:

datediff(day, @date, dateadd(month, 1, @date))

使其适用于每个日期:

datediff(day, dateadd(day, 1-day(@date), @date),
              dateadd(month, 1, dateadd(day, 1-day(@date), @date)))


你不是说:datediff(day,dateadd(day,1-day(@ date),@ date),dateadd(month,1,dateadd(day,1-day(@date),@ date)))
这是一个罕见的角落案例,但我偶然发现它:这将在9999年12月引发错误.
就像斯坦所说,在某些情况下,这会给出不准确的结果

3> Daniel Davis..:

最优雅的解决方案:适用于任何@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



4> 小智..:

更简单......试试 day(eomonth(@Date))



5> Brimstedt..:
--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()))


这个答案几乎与下面的答案相同,票数为75.
推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有