求一段代码的优化写法

WX1780733913 2018-07-09 02:45:54
公司账期是每月18日到次月17日, 想要取前3个月的账期开始日期和结束日期,求下段代码的优化写法

DECLARE @Year CHAR(4) ,
@LastYear CHAR(4) , --上一月 年
@Month CHAR(2) ,
@dBegMonth1 CHAR(2) , --上一月开始 月
@dEndMonth1 CHAR(2) , --上一月结束 月
@dBegMonth2 CHAR(2) , --上一月开始 月
@dEndMonth2 CHAR(2) , --上一月结束 月
@dBegMonth3 CHAR(2) , --上一月开始 月
@dEndMonth3 CHAR(2) , --上一月结束 月
@Day CHAR(2) ,
@上一月初 CHAR(10) ,
@上一月末 CHAR(10) ,
@上二月初 NVARCHAR(10) ,
@上二月末 NVARCHAR(10) ,
@上三月初 NVARCHAR(10) ,
@上三月末 NVARCHAR(10);
SET @Year = YEAR(GETDATE());
SET @Month = MONTH(GETDATE());
SET @Day = DAY(GETDATE());
SET @LastYear = @Year - 1;
-- SET @gDate=GETDATE()

SET @Year = 2018;
SET @Month = 1;
SET @Day = 19;
IF @Day < 18
BEGIN
IF @Month >= 5
BEGIN
SET @dBegMonth1 = @Month - 2;
SET @dEndMonth1 = @Month - 1;
SET @dBegMonth2 = @Month - 3;
SET @dEndMonth2 = @Month - 2;
SET @dBegMonth3 = @Month - 4;
SET @dEndMonth3 = @Month - 3;
SET @上一月初 = @Year + '-' + @dBegMonth1 + '-18';
SET @上一月末 = @Year + '-' + @dEndMonth1 + '-17';
SET @上二月初 = @Year + '-' + @dBegMonth2 + '-18';
SET @上二月末 = @Year + '-' + @dEndMonth2 + '-17';
SET @上三月初 = @Year + '-' + @dBegMonth3 + '-18';
SET @上三月末 = @Year + '-' + @dEndMonth3 + '-17';
END;

IF @Month = 4
BEGIN
SET @dBegMonth1 = @Month - 2;
SET @dEndMonth1 = @Month - 1;
SET @dBegMonth2 = @Month - 3;
SET @dEndMonth2 = @Month - 2;
SET @dBegMonth3 = 12;
SET @dEndMonth3 = @Month - 3;
SET @上一月初 = @Year + '-' + @dBegMonth1 + '-18';
SET @上一月末 = @Year + '-' + @dEndMonth1 + '-17';
SET @上二月初 = @Year + '-' + @dBegMonth2 + '-18';
SET @上二月末 = @Year + '-' + @dEndMonth2 + '-17';
SET @上三月初 = @LastYear + '-' + @dBegMonth3 + '-18';
SET @上三月末 = @Year + '-' + @dEndMonth3 + '-17';
END;
IF @Month = 3
BEGIN
SET @dBegMonth1 = @Month - 2;
SET @dEndMonth1 = @Month - 1;
SET @dBegMonth2 = 12;
SET @dEndMonth2 = @Month - 2;
SET @dBegMonth3 = 11;

SET @dEndMonth3 = 12;
SET @上一月初 = @Year + '-' + @dBegMonth1 + '-18';
SET @上一月末 = @Year + '-' + @dEndMonth1 + '-17';
SET @上二月初 = @LastYear + '-' + @dBegMonth2 + '-18';
SET @上二月末 = @Year + '-' + @dEndMonth2 + '-17';
SET @上三月初 = @LastYear + '-' + @dBegMonth3 + '-18';
SET @上三月末 = @LastYear + '-' + @dEndMonth3 + '-17';
END;
IF @Month = 2
BEGIN
SET @dBegMonth1 = 12;
SET @dEndMonth1 = @Month - 1;
SET @dBegMonth2 = 11;
SET @dEndMonth2 = 12;
SET @dBegMonth3 = 10;

SET @dEndMonth3 = 11;
SET @上一月初 = @LastYear + '-' + @dBegMonth1 + '-18';
SET @上一月末 = @Year + '-' + @dEndMonth1 + '-17';
SET @上二月初 = @LastYear + '-' + @dBegMonth2 + '-18';
SET @上二月末 = @LastYear + '-' + @dEndMonth2 + '-17';
SET @上三月初 = @LastYear + '-' + @dBegMonth3 + '-18';
SET @上三月末 = @LastYear + '-' + @dEndMonth3 + '-17';
END;
IF @Month = 1
BEGIN
SET @dBegMonth1 = 11;
SET @dEndMonth1 = 12;
SET @dBegMonth2 = 10;
SET @dEndMonth2 = 11;
SET @dBegMonth3 = 9;

SET @dEndMonth3 = 10;
SET @上一月初 = @LastYear + '-' + @dBegMonth1 + '-18';
SET @上一月末 = @LastYear + '-' + @dEndMonth1 + '-17';
SET @上二月初 = @LastYear + '-' + @dBegMonth2 + '-18';
SET @上二月末 = @LastYear + '-' + @dEndMonth2 + '-17';
SET @上三月初 = @LastYear + '-' + @dBegMonth3 + '-18';
SET @上三月末 = @LastYear + '-' + @dEndMonth3 + '-17';
END;
END;
ELSE
BEGIN
IF @Month >= 4
BEGIN
SET @dBegMonth1 = @Month - 1;
SET @dEndMonth1 = @Month;
SET @dBegMonth2 = @Month - 2;
SET @dEndMonth2 = @Month - 1;
SET @dBegMonth3 = @Month - 3;
SET @dEndMonth3 = @Month - 2;
SET @上一月初 = @Year + '-' + @dBegMonth1 + '-18';
SET @上一月末 = @Year + '-' + @dEndMonth1 + '-17';
SET @上二月初 = @Year + '-' + @dBegMonth2 + '-18';
SET @上二月末 = @Year + '-' + @dEndMonth2 + '-17';
SET @上三月初 = @Year + '-' + @dBegMonth3 + '-18';
SET @上三月末 = @Year + '-' + @dEndMonth3 + '-17';
END;
IF @Month = 3
BEGIN
SET @dBegMonth1 = @Month - 1;
SET @dEndMonth1 = @Month;
SET @dBegMonth2 = @Month - 2;
SET @dEndMonth2 = @Month - 1;
SET @dBegMonth3 = 12;
SET @dEndMonth3 = @Month - 2;
SET @上一月初 = @Year + '-' + @dBegMonth1 + '-18';
SET @上一月末 = @Year + '-' + @dEndMonth1 + '-17';
SET @上二月初 = @Year + '-' + @dBegMonth2 + '-18';
SET @上二月末 = @Year + '-' + @dEndMonth2 + '-17';
SET @上三月初 = @LastYear + '-' + @dBegMonth3 + '-18';
SET @上三月末 = @Year + '-' + @dEndMonth3 + '-17';
END;
IF @Month = 2
BEGIN
SET @dBegMonth1 = @Month - 1;
SET @dEndMonth1 = @Month;
SET @dBegMonth2 = 12;
SET @dEndMonth2 = @Month - 1;
SET @dBegMonth3 = 11;
SET @dEndMonth3 = 12;
SET @上一月初 = @Year + '-' + @dBegMonth1 + '-18';
SET @上一月末 = @Year + '-' + @dEndMonth1 + '-17';
SET @上二月初 = @LastYear + '-' + @dBegMonth2 + '-18';
SET @上二月末 = @Year + '-' + @dEndMonth2 + '-17';
SET @上三月初 = @LastYear + '-' + @dBegMonth3 + '-18';
SET @上三月末 = @LastYear + '-' + @dEndMonth3 + '-17';
END;
IF @Month = 1
BEGIN
SET @dBegMonth1 = 12;
SET @dEndMonth1 = @Month;
SET @dBegMonth2 = 11;
SET @dEndMonth2 = 12;
SET @dBegMonth3 = 10;

SET @dEndMonth3 = 11;
SET @上一月初 = @LastYear + '-' + @dBegMonth1 + '-18';
SET @上一月末 = @Year + '-' + @dEndMonth1 + '-17';
SET @上二月初 = @LastYear + '-' + @dBegMonth2 + '-18';
SET @上二月末 = @LastYear + '-' + @dEndMonth2 + '-17';
SET @上三月初 = @LastYear + '-' + @dBegMonth3 + '-18';
SET @上三月末 = @LastYear + '-' + @dEndMonth3 + '-17';
END;
END;
SELECT @上一月初 ,
@上一月末 ,
@上二月初 ,
@上二月末 ,
@上三月初 ,
@上三月末;
...全文
260 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
tom0311 2018-07-16
  • 打赏
  • 举报
回复
declare @year int,@month int,@day int
set @year=2018
set @month=5
set @day=18
declare @date datetime
set @date=CAST(CAST(@year AS VARCHAR(20))+RIGHT('0'+CAST(@month AS VARCHAR(20)),2)+RIGHT('0'+CAST(@day AS VARCHAR(20)),2) AS DATETIME)
--上月开始日期
SELECT DATEADD(MONTH,-1,@date)
--上月末
SELECT @date-1
--上二月初
SELECT DATEADD(MONTH,-2,@date)
--上二月末
SELECT DATEADD(MONTH,-1,@date)-1
--上三月初
SELECT DATEADD(MONTH,-3,@date)
--上三月末
SELECT DATEADD(MONTH,-2,@date)-1
多简单的事,学习一下dateadd等MSSQL函数用法
吉普赛的歌 版主 2018-07-10
  • 打赏
  • 举报
回复
DECLARE @d DATETIME,@dBegin DATETIME,@dEnd DATETIME
SET @d='2018-07-10'
--得到指定时间的开始日期和结束日期
SET @dBegin=CONVERT(CHAR(7),@d,120)+'-18'
SET @dEnd=CONVERT(CHAR(7), DATEADD(MONTH ,1,@dBegin),120)+'-17'
SELECT
@dBegin AS [本月账期开始]
,@dEnd AS [本月账期结束]
,DATEADD(MONTH , -1, @dBegin) AS [前1个月账期开始]
,DATEADD(MONTH , -1, @dEnd) AS [前1个月账期结束]
,DATEADD(MONTH , -2, @dBegin) AS [前2个月账期开始]
,DATEADD(MONTH , -2, @dEnd) AS [前2个月账期结束]
,DATEADD(MONTH , -3, @dBegin) AS [前3个月账期开始]
,DATEADD(MONTH , -3, @dEnd) AS [前3个月账期结束]

shinger126 2018-07-09
  • 打赏
  • 举报
回复
declare @year int,@month int,@day int
set @year=2018
set @month=5
set @day=18
declare @date datetime
set @date=CAST(CAST(@year AS VARCHAR(20))+RIGHT('0'+CAST(@month AS VARCHAR(20)),2)+RIGHT('0'+CAST(@day AS VARCHAR(20)),2) AS DATETIME)
--上月开始日期
SELECT DATEADD(MONTH,-1,@date)
--上月末
SELECT @date-1
--上二月初
SELECT DATEADD(MONTH,-2,@date)
--上二月末
SELECT DATEADD(MONTH,-1,@date)-1
--上三月初
SELECT DATEADD(MONTH,-3,@date)
--上三月末
SELECT DATEADD(MONTH,-2,@date)-1
多简单的事,学习一下dateadd等MSSQL函数用法

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧