SQL日期推算...

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值