计算前一天,上一个月

本文介绍了一种使用SQL来处理日期范围的方法,通过设置变量来自动计算统计周期的开始和结束时间,并展示了如何根据当前时间来获取上个月的具体日期,适用于需要定期统计的数据报表场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最笨的方法

declare @TimeEnd varchar(30),
   @TimeStart varchar(30),
   @subs varchar(2)
 --计算统计的开始时间和结束时间
 set @Time=convert(varchar(30),@Time,120)
--
 select @TimeStart=rtrim(ltrim(Remark)) from dbo.BaseInfo where BaseInfoID=139--获取分隔时间
 select @TimeEnd=rtrim(ltrim(Remark)) from dbo.BaseInfo where BaseInfoID=140
 set @subs=month(@Time)--获取月份
 if(len(@subs)=1)
  set @TimeEnd=cast(year(@Time) as varchar(4))+'-0'+@subs+'-'+@TimeEnd
 else
  set @TimeEnd=cast(year(@Time) as varchar(4))+'-'+@subs+'-'+@TimeEnd

 set @subs=cast(cast(@subs as int)-1 as varchar(2))
 if(len(@subs)=1)
  set @TimeStart=cast(year(@Time) as varchar(4))+'-0'+@subs+'-'+@TimeStart
 else
  set @TimeStart=cast(year(@Time) as varchar(4))+'-'+@subs+'-'+@TimeStart
 --select @TimeStart,@TimeEnd

 

 

简化:

declare
 @TimeStart varchar(30),
 @TimeEnd varchar(30),
 @time varchar(30),
 @DetpID varchar(36)
 set @DetpID='43b5d11c-e8be-4cfd-ac99-ddff342ca7ad'
 set @time='2010-06-02'
 select @TimeEnd=rtrim(ltrim(Remark)) from dbo.BaseInfo where BaseInfoID=140
 set @TimeEnd=replace(@Time,substring(@Time,9,2),@TimeEnd)
 set @TimeStart=Convert(varchar(30),DATEADD(day,1,DATEADD(month, -1, convert(datetime,@TimeEnd,120))),120)
 select cast(sum(convert(float,Isnull(Scores,100))/100*convert(float,Remark))/sum(convert(float,Remark)*convert(float,Isnull(Complete,1)))*100 as decimal(9,4)) as source
 from View_GetWorkScore
 where TimeEnd between @TimeStart and @TimeEnd and DetpID=@DetpID

select DATEADD(month, -1, getdate())--上一个月
select DATEADD(day, -1, getdate()) --前一天
select getdate()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值