【SQL Server】计算N个月前,N个月后的方法

举报
bluetata 发表于 2023/07/31 21:25:34 2023/07/31
【摘要】 #1. 计算N个月前的日期#2. 计算N个月后的日期#3. 月末最后一天的情况(计算从日数多的月到日数较少的月)#4. 月末最后一天的情况(计算从日数少的月到日数较多的月) 1 | 计算N个月前的日期如果要计算N个月前的日期。使用DATEADD函数,并且第二个参数N要指定为负数。–指定N为负数DATEADD(month, N, 日付) 例如,计算2015年10月15日的前11个月的日期,SQ...

#1. 计算N个月前的日期
#2. 计算N个月后的日期
#3. 月末最后一天的情况(计算从日数多的月到日数较少的月)
#4. 月末最后一天的情况(计算从日数少的月到日数较多的月)

1 | 计算N个月前的日期

如果要计算N个月前的日期。使用DATEADD函数,并且第二个参数N要指定为负数。
–指定N为负数
DATEADD(month, N, 日付) 
例如,计算2015年10月15日的前11个月的日期,SQL 如下:

--以下会全返回 2014-11-15 00:00:00.000
SELECT 
  DATEADD(month, -11, '20151015'),
  DATEADD(month, -11, '2015/10/15'),
  DATEADD(month, -11, '2015-10-15') 

2 | 计算N个月后的日期

如果计算N个月后的日期,直接使用DATEADD函数,且第二个参数N指定为正数。

DATEADD(month, N, 日付)
例如,计算2015年10月15日的后3个月的日期,SQL如下:

--以下会全返回 2016-01-15 00:00:00.000
SELECT 
  DATEADD(month, 3, '20151015'),
  DATEADD(month, 3, '2015/10/15'),
  DATEADD(month, 3, '2015-10-15') 

3 | 月末最后一天的情况(计算从日数多的月到日数较少的月)

在以日数多的月末最后一天开始,计算N个月后(N个月前)的日期,且该日期所在月为日数少的月,返回N个月后(N个月前)月末最后一天。
例如,3月31日的一个月后为4月30日。3月31日的一个月前,返回2月最后一天,且要考虑闰年的情况。
实际执行结果如下:

SELECT 
  --返回 2015-04-30 00:00:00.000
  DATEADD(month,  1, '2015/3/31'),
  --返回 2015-02-28 00:00:00.000
  DATEADD(month, -1, '2015/3/31'),
  --返回 2016-02-29 00:00:00.000
  DATEADD(month, -1, '2016/3/31') 

4 | 月末最后一天的情况(计算从日数少的月到日数较多的月)

在以日数少的月末最后一天开始,计算N个月后(N个月前)的日期,且该日期所在月为日数多的月,返回日期不变。
例如,4月30日的一个月后为5月30日,4月30日的前一个月为3月30日。
实际执行结果:

SELECT 
  --返回 2015-05-30 00:00:00.000
  DATEADD(month,  1, '2015/4/30'),
  --返回 2015-03-30 00:00:00.000
  DATEADD(month, -1, '2015/4/30') 
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。