sqlserver 包含一个时间区间的存储过程如何写
我有一个表(A)结构,字段有id,开始时间,结束时间。
假设有条数据为 "001" 2010/9/1 2012/9/4
怎么写存储过程,让他输出为
"001" 2012/9/1
"001" 2012/9/2
"001" 2012/9/3
"001" 2012/9/4
追问:你理解错我的问题了吧
答案:Create Proc PrintDate
@id varchar(10)
as
Begin
Declare @startDate datetime
Declare @endDate datetime
Declare @tempDate varchar(15)
Create Table #t --临时表
(
Id varchar(10),
dtime varchar(15)
)
Select Top 1 @startDate=convert(datetime,开始时间),@endDate=convert(datetime,结束时间) From 表 Where id=@id
While @startDate<=@endDate
Begin
Set @startDate=dateAdd(d,1,@startDate)
Set @tempDate=convert(varchar,@startDate,111)
Insert Into #t(id,dTime) values(@id,@tempDate)
End
Select * From #t
End
-- 执行: PrintDate '001'
其他:create proc ps_test
@datetime1 datetime
@datetime2 datetime
as
select *from biao a
where 开始时间 between datetime1 and datetime2 --这里的时间应该为同一个栏位才可以
go
--exec ps_test '2012-09-01','2012-09-04' 在存储过程中,取出开始时间、结束时间
然后以天为单位进行循环,并输出日期串 create PROCEDURE ps_test
declare @id varchar(50)
as
begin
declare @from_date datetime
declare @to_date datetime
create table #tt_table (id,output_date)
select @from_date = 开始时间, @to_date = 结束时间
from A
where id = @id
while(@from_date <= @to_date)
begin
insert into #tt_table(id,output_date)
values( @id,@from_date)
DATEADD(day,1,@from_date)
end
select id, output_date
from #tt_table
end
go ----创建
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
CREATE PROCEDURE [dbo].[sp_a]
@id nvarchar(10)
AS
BEGIN
SET NOCOUNT ON;
declare @start smalldatetime
declare @end smalldatetime
declare @temp smalldatetime
declare @t table(id char(3),tm smalldatetime)
SELECT top 1 @start=开始时间,@end=结束时间 from A where id=@id
set @temp=@start
while @temp<=@end
Begin
Insert Into @t(id,tm) values(@id,@temp)
Set @temp=dateAdd(d,1,@temp)
End
select * from @t
END
-----执行
DECLARE @id nvarchar(10)
set @id='001'
EXECUTE [sp_a] @id
----结果
001 2010-09-01 00:00:00
001 2010-09-02 00:00:00
001 2010-09-03 00:00:00
001 2010-09-04 00:00:00
上一个:求sqlserver高手指导
下一个:sqlserver2008中资源等待。