SQL日期推算...

来源:互联网 发布:游杰网络 编辑:程序博客网 时间:2024/04/28 06:05

 

DECLARE @DT AS DATETIME
SET @DT = GETDATE()

SELECT CAST(CONVERT(VARCHAR(8),DATEADD(MONTH,(DATEPART(QUARTER,@DT)*3-MONTH(@DT)-2),@DT),120)+'01' AS DATETIME)
--Result--
2008-11-01

 

计算逻辑:
       用当前的季度 * 每季度的月份数(3) - 当前月 - 季度中的2个月份

如:  Date: 2008-11-06
      季度: 4

计算: 4*3-11-2 = -1

根据计算的结用DATEADD 求合,对日期时行调整,得出当前季度的第一个月份,再拼接 ‘01’,得出当明季度的第一天。

通过变通我们可以得到季度最后一个月的第一天:

SELECT CAST(CONVERT(VARCHAR(8),DATEADD(MONTH,(DATEPART(QUARTER,@DT)*3-MONTH(@DT)),@DT),120)+'01' AS DATETIME)

 

本月的最后一天:

DECLARE @DT DATETIME
SET @DT=GETDATE()
SELECT DATEADD(DAY,-1,CONVERT(VARCHAR(8),DATEADD(MONTH,1,@DT),120)+'1')

--Result--
2008-11-30 00:00:00.000

 

另一个方法最本月最后一天,减去天数,变成上个月的最后一天,再加1月份,变成当前月的最后天

SELECT DATEADD(MONTH,1,DATEADD(DAY,-DAY(@DT),@DT))