HELP!!!!HELP!!!!HELP!!!!时间紧要!!!!!!!!!!!!!HELP!!!!HELP!!!!HELP!!!!

being21 2006-09-08 10:33:42
HELP!!!!
DECLARE @BeginTime DATETIME
DECLARE @EndTime datetime
SET @BeginTime = '2006-1-1 0:0:0'
SET @EndTime = '2006-2-1 0:0:0'

set nocount on

--定义统计的月份差值
declare @variable int
set @variable = datediff(month,@BeginTime,@EndTime)

--定义变化从统计起始到结束的时间
declare @Begin datetime
declare @End datetime
set @Begin = convert(datetime,(left(convert(varchar,@BeginTime,2),6)+'01'))
set @End = convert(datetime,(left(convert(varchar,@EndTime,2),6)+'01'))


declare @T table(任务编码 char(20),编码 int)

------------------------------------------------------------------------------0
if (select @variable) >= 0

begin

select 任务编码,编码 = identity(int)
into #temp0
from Ttaskview
where 生成任务时刻>= @Begin and 生成任务时刻<=(dateadd(month,1,@begin))

insert into @T
select * from #temp0
drop table #temp0

end

------------------------------------------------------------------------------1
if (select @variable) >= 1

begin

select 任务编码,编码 = identity(int)
into #temp1
from Ttaskview
where 生成任务时刻>=(dateadd(month,1,@begin)) and 生成任务时刻<=(dateadd(month,2,@begin))

insert into @T
select * from #temp1
drop table #temp1

end

------------------------------------------------------------------------------2
if (select @variable) >= 2

begin

select 任务编码,编码 = identity(int)
into #temp2
from Ttaskview
where 生成任务时刻>= (dateadd(month,2,@begin))and 生成任务时刻<=(dateadd(month,3,@begin))

insert into @T
select * from #temp2
drop table #temp2

end

------------------------------------------------------------------------------3
if (select @variable) >= 3

begin

select 任务编码,编码 = identity(int)
into #temp3
from Ttaskview
where 生成任务时刻>= (dateadd(month,3,@begin))and 生成任务时刻<=(dateadd(month,4,@begin))

insert into @T
select * from #temp3
drop table #temp3

end

select * from @T

请求改进,优化这个长长的垃圾语句~~~~
我自己写的,因为只能被动的计算差值为若干月的表!!!
而且十分的慢,呵呵!!!
...全文
98 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
being21 2006-09-08
  • 打赏
  • 举报
回复
呵呵!
DECLARE @BEGINTIME DATETIME
DECLARE @ENDTIME DATETIME
DECLARE @I INT
SET @BEGINTIME = '2006-1-1 0:0:0'
SET @ENDTIME = '2006-2-1 0:0:0'

SET NOCOUNT ON

--定义统计的月份差值
DECLARE @VARIABLE INT
SET @VARIABLE = DATEDIFF(MONTH,@BEGINTIME,@ENDTIME)

--定义变化从统计起始到结束的时间
DECLARE @BEGIN DATETIME
DECLARE @END DATETIME
SET @BEGIN = CONVERT(DATETIME,(LEFT(CONVERT(VARCHAR,@BEGINTIME,2),6)+'01'))
SET @END = CONVERT(DATETIME,(LEFT(CONVERT(VARCHAR,@ENDTIME,2),6)+'01'))


DECLARE @T TABLE(任务编码 CHAR(20),编码 INT)

SET @I=0

WHILE @I<=@VARIABLE
BEGIN
IF (SELECT @VARIABLE) >= @I
BEGIN
SELECT 任务编码,编码 = IDENTITY(INT)
INTO #TEMP0
FROM TTASKVIEW
WHERE 生成任务时刻>=(DATEADD(MONTH,@I,@BEGIN)) AND 生成任务时刻>= @BEGIN AND 生成任务时刻<=(DATEADD(MONTH,@I+1,@BEGIN))

INSERT INTO @T
SELECT * FROM #TEMP0
DROP TABLE #TEMP0
END
SET @I=@I+1
END

SELECT * FROM @T

这样就可以了!!!谢谢!!!
being21 2006-09-08
  • 打赏
  • 举报
回复
呵呵,学习!!!
没有达到我的要求!!!
我没有说明:我要求如果时间差值为N个月的话,@T表里面的自动增加列就有N个。每个月单独自增!下个月开始第一个为1!!!

呵呵!!!
yczealot 2006-09-08
  • 打赏
  • 举报
回复
DECLARE @BEGINTIME DATETIME
DECLARE @ENDTIME DATETIME
DECLARE @I INT
SET @BEGINTIME = '2006-1-1 0:0:0'
SET @ENDTIME = '2006-2-1 0:0:0'

SET NOCOUNT ON

--定义统计的月份差值
DECLARE @VARIABLE INT
SET @VARIABLE = DATEDIFF(MONTH,@BEGINTIME,@ENDTIME)

--定义变化从统计起始到结束的时间
DECLARE @BEGIN DATETIME
DECLARE @END DATETIME
SET @BEGIN = CONVERT(DATETIME,(LEFT(CONVERT(VARCHAR,@BEGINTIME,2),6)+'01'))
SET @END = CONVERT(DATETIME,(LEFT(CONVERT(VARCHAR,@ENDTIME,2),6)+'01'))


DECLARE @T TABLE(任务编码 CHAR(20),编码 INT)

SET @I=0

WHILE @I<=3
BEGIN
IF (SELECT @VARIABLE) >= @I
BEGIN
SELECT 任务编码,编码 = IDENTITY(INT)
INTO #TEMP0
FROM TTASKVIEW
WHERE 生成任务时刻>=(DATEADD(MONTH,@I,@BEGIN)) AND 生成任务时刻>= @BEGIN AND 生成任务时刻<=(DATEADD(MONTH,@I+1,@BEGIN))

INSERT INTO @T
SELECT * FROM #TEMP0
DROP TABLE #TEMP0
END
SET @I=@I+1
END

SELECT * FROM @T
yczealot 2006-09-08
  • 打赏
  • 举报
回复
>=0 也可能>=1 >=2,楼主这个语句似乎多次执行啊

34,590

社区成员

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

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