这个存储过程是什么意思?

huo_v_wu1 2008-04-21 05:23:27
这段的存储过程的代码是什么意思 请大家指点一下
declare @ym varchar(12),@y varchar(4),@m varchar(2),@c1 varchar(12),@c2 varchar(12),@c3 varchar(12)
declare @y1 int,@y2 int,@m1 int ,@m2 int
set @y1=DATEPART(year,@d1)
set @y2=DATEPART(year,@d2)
set @m1=DATEPART(month,@d1)
set @m2=DATEPART(month,@d2)
--select @y1,@y2,@m1,@m2
declare @i int,@j int,@n1 int,@n2 int
set @c1=''
set @c2=''
set @c3=''

if @y2-@y1>1
return

if @m1>9
begin
if @m2+13-@m1>3
return
else
begin
set @j=1
set @n1=@y1*100+@m1
set @n2=@y2*100+@m2
set @i=@n1
while @i<= @n2
begin
set @ym=convert(varchar(6),@i)
if @j=1
set @c1=@ym
else
if @j=2
set @c2=@ym
else
set @c3=@ym
if convert(int,right(convert(varchar(12),@i),2))=12
begin
set @i=@i+89
end
else
set @i=@i+1
set @j=@j+1
end

end
end
else --@m1<=9
begin
if (@m2-@m1+1>3) or (@m2<@m1)
return
else
begin
set @j=1
set @n1=@y1*100+@m1
set @n2=@y2*100+@m2
set @i=@n1
--select @n1,@n2
while @i<= @n2
begin
set @ym=convert(varchar(6),@i)
if @j=1
set @c1=@ym
else
if @j=2
set @c2=@ym
else
set @c3=@ym
set @j=@j+1
set @i=@i+1
end
end
...全文
148 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cxmcxm 2008-04-21
  • 打赏
  • 举报
回复
加上了注释,
处理结果应该是取日期d1到d2间的3个月,分别赋给c1,c2,c3
如d1='2008-1-1',d2='2008-4-1',即得出c1='200801',c2='200802',c3='200803'
如d1='2007-12-1',d2='2008-2-1' 可得出c1='200712',c2='200801',c3='200802'
declare @ym varchar(12),@y varchar(4),@m varchar(2),@c1 varchar(12),@c2 varchar(12),@c3 varchar(12) 
declare @y1 int,@y2 int,@m1 int ,@m2 int
set @y1=DATEPART(year,@d1)
set @y2=DATEPART(year,@d2)
set @m1=DATEPART(month,@d1)
set @m2=DATEPART(month,@d2)
--select @y1,@y2,@m1,@m2
declare @i int,@j int,@n1 int,@n2 int
set @c1=''
set @c2=''
set @c3=''

if @y2-@y1>1
return

if @m1>9
begin
if @m2+13-@m1>3 --m2与m1超过3个月
return
else
begin
set @j=1
set @n1=@y1*100+@m1 --转为yyyymm的整数
set @n2=@y2*100+@m2
set @i=@n1
while @i <= @n2
begin
set @ym=convert(varchar(6),@i)
if @j=1
set @c1=@ym
else
if @j=2
set @c2=@ym
else
set @c3=@ym
if convert(int,right(convert(varchar(12),@i),2))=12 --如果为12月时
begin
set @i=@i+89 --如果为12月时+89转为+1年
end
else
set @i=@i+1
set @j=@j+1
end --c1,c2,c3应该分别为第1个月,第2个月,第3个月

end
end
else --@m1 <=9 以下代码为处理月份<=9月的情况,所得的c1,c2,c3与上面情况相同
begin
if (@m2-@m1+1>3) or (@m2 <@m1)
return
else
begin
set @j=1
set @n1=@y1*100+@m1
set @n2=@y2*100+@m2
set @i=@n1
--select @n1,@n2
while @i <= @n2
begin
set @ym=convert(varchar(6),@i)
if @j=1
set @c1=@ym
else
if @j=2
set @c2=@ym
else
set @c3=@ym
set @j=@j+1
set @i=@i+1
end
end


shuizhizhou0007 2008-04-21
  • 打赏
  • 举报
回复
比较时间
huo_v_wu1 2008-04-21
  • 打赏
  • 举报
回复
我都不知道这是哪位神仙姐姐写的这个过程,我真的搞不明白是什么意思 看到看不懂的啦
-狙击手- 2008-04-21
  • 打赏
  • 举报
回复
小梁子,换个图像
liangCK 2008-04-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 happyflystone 的回复:]
比较时间 ,好长
[/Quote]
-狙击手- 2008-04-21
  • 打赏
  • 举报
回复
比较时间 ,好长
dawugui 2008-04-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dawugui 的回复:]
貌似是个和时间有关的东西?
[/Quote]
好象是比较两个时间的某种差异.
dawugui 2008-04-21
  • 打赏
  • 举报
回复
貌似是个和时间有关的东西?
内容概要:本文详细介绍了利用Simulink进行变压器开路试验的电路连接配置与仿真实现方法,重点在于通过仿真手段还原实际电力系统中变压器在空载条件下的电气特性,从而深入理解其工作原理与性能表现。文章作为电力系统仿真系列研究的一部分,系统阐述了从电路模型搭建、参数设定、仿真运行到结果分析的完整流程,突出展示了MATLAB/Simulink在电力设备建模与教学科研中的强大功能与应用价值。; 适合人群:具备电力系统基础知识,熟悉MATLAB/Simulink仿真环境,从事电气工程、自动化及相关领域的研发人员,以及高年级本科生和研究生。; 使用场景及目标:①掌握变压器开路试验的基本原理与Simulink仿真建模的具体步骤;②通过仿真实验深入理解空载电流、铁芯损耗及励磁特性等关键参数的物理意义;③为后续开展变压器短路试验、暂态过程分析以及其他电力设备的仿真研究奠定理论与实践基础。; 阅读建议:建议结合Simulink软件动手实践,逐步构建并调试电路模型,重点关注各元件参数的设置方法与测量模块的应用技巧,同时推荐参考文中提及的其他相关仿真案例进行拓展学习,以全面提升对电力系统仿真实践的整体认知与操作能力。

22,297

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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