[SQL]计算N个月前,N个月后的方法

来源:互联网 发布:p2p网络终结者下载 编辑:程序博客网 时间:2024/06/14 12:16

Agenda

#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.000SELECT   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.000SELECT   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') 


本文原创由`bluetata`发布于blog.csdn.net、转载请务必注明出处。


Flag Counter


0 0
原创粉丝点击