SQL 上季度三个月的第一天和最后一天

 --上季度 第一月第一天 

 convert(char(10), dateadd(mm, -3, dateadd(qq, datediff(qq,0,getdate()), 0)), 112)  

 --上季度 第一月最后一天

convert(char(10), dateadd(mm, -2, dateadd(qq, datediff(qq,0,getdate()), 0))-1, 112)

--上季度 第二月第一天

convert(char(10), dateadd(mm, -2, dateadd(qq, datediff(qq,0,getdate()), 0)), 112)

--上季度 第二月最后一天    

convert(char(10), dateadd(mm, -1, dateadd(qq, datediff(qq,0,getdate()), 0))-1, 112)

--上季度 第三月第一天  

convert(char(10), dateadd(mm, -1, dateadd(qq, datediff(qq,0,getdate()), 0)), 112) 

--上季度 第三月最后一天 

convert(char(10), dateadd(qq, datediff(qq,0,getdate()), 0)-1, 112)        

以上我已测试过了,如果大家有疑义,可以自己推敲一下(之前使用过在网上搜的语句,结果发现是错的,所以大家在网上借鉴时最好能自己推敲一下)。

 

下面以求解 上季度第二月最后一天的语句 select  convert(char(10), dateadd(mm, -1, dateadd(qq, datediff(qq,0,getdate()), 0))-1, 112) 为例,简单进行一下解释:

第一步:getdate()函数:返回当前日期和时间;

第二步:datediff(qq,0,getdate()):计算当前日期和“1900-01-01 00:00:00.000”这个日期之间的季度数

第三步:dateadd(qq, datediff(qq,0,getdate()), 0):dateadd()函数增加第二步计算的季度数加到“1900-01-01 00:00:00.000”这个日期上,得到本季度的第一天;

第四步:dateadd(mm, -1, dateadd(qq, datediff(qq,0,getdate()), 0)):外层的dateadd()函数对第三步的计算得到的日期的月上加-1,得到上季度第三月的第一天;

第五步:dateadd(mm, -1, dateadd(qq, datediff(qq,0,getdate()), 0))-1:将上季度第三月的第一天减一就得到上季度第二月最后一天;

第六步:convert(char(10), dateadd(mm, -1, dateadd(qq, datediff(qq,0,getdate()), 0))-1, 112):使用convert()函数将日期格式转换为“YYYYMMDD”,如20110831。

 

datediff()函数见:http://www.w3school.com.cn/sql/func_datediff.asp

dateadd()函数见:http://www.w3school.com.cn/sql/func_dateadd.asp

convert()函数见:http://www.w3school.com.cn/sql/func_convert.asp

你可能感兴趣的:(SQL 上季度三个月的第一天和最后一天)