首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dateadd和datediff获取月份的最后一天

问Dateadd和datediff获取月份的最后一天
EN

Stack Overflow用户
提问于 2015-04-08 21:19:33
回答 2查看 1.8K关注 0票数 0

我不明白为什么这个查询对每年的2月份有效,而对31天的月份无效?除了二月份,我每个月都有30天的工作时间。有人能给我解释一下吗?

代码语言:javascript
复制
SELECT  dateadd( mm, -240 + 22, DATEADD(mm, 1 + DATEDIFF(mm, 0, GETDATE()), -1)) AS n

我使用上面的代码,因为我需要在22的位置输入一个数字来获得不同的日期。我使用它就像一个日历函数,每个月的最后一天。

EN

回答 2

Stack Overflow用户

发布于 2015-04-08 21:22:25

代码语言:javascript
复制
SELECT Current_Timestamp As today
     , DateAdd(mm, DateDiff(mm, 0, Current_Timestamp), 0) As first_of_current_month
     , DateAdd(mm, DateDiff(mm, 0, Current_Timestamp) + 1, 0) As first_of_next_month
     , DateAdd(dd, -1, DateAdd(mm, DateDiff(mm, 0, Current_Timestamp) + 1, 0)) As last_of_current_month
;
票数 0
EN

Stack Overflow用户

发布于 2015-04-08 22:16:18

我通常用下面的方法来做。

首先,获取当月的第一天:

代码语言:javascript
复制
SELECT CAST(DATEADD(DAY, 1 - DAY(GETDATE()), GETDATE()) AS DATE)

然后,获取下个月的第一天,在之前获取的日期上加上一个月:

代码语言:javascript
复制
SELECT CAST(DATEADD(MONTH, 1, DATEADD(DAY, 1 - DAY(GETDATE()), GETDATE())) AS DATE)

最后,获取当月的最后一天作为下个月第一天的前一天:

代码语言:javascript
复制
SELECT CAST(DATEADD(DAY, -1, DATEADD(MONTH, 1, DATEADD(DAY, 1 - DAY(GETDATE()), GETDATE()))) AS DATE)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29515826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档