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))