为了账号安全,请及时绑定邮箱和手机立即绑定

不知道各位大侠还有其他的什么好方法能实现吗?

不知道各位大侠还有其他的什么好方法能实现吗?

慕妹3146593 2022-10-20 15:15:58
大家好,我有一个数据表(如表1所示),我想对每个站在开始时间和结束时间之间插入时间段,步长为1天,得到的结果应该为表2所示,表1结构如下站名 开始时间 结束时间s1 1980-1-1 1980-2-1s2 1992-2-1 1993-3-1表2站名 时间s1 1980-1-1s1 1980-1-2s1 1980-1-3................s1 1980-2-1s2 1992-2-1s2 1992-2-2..........s2 1993-3-1我自己编了一个表函数,但是调用函数时怎么才能把各个站点的参数传递到函数里呢?谢谢各位大侠了--@tminit是开始时间,@tmend是结束时间,TM是时间CREATE FUNCTION CaculateDailyTM(@STCD char(8),@tminit datetime,@tmend datetime)returns @mytbl table (STCD char(8),TM datetime)asbegindeclare @temptm datetimeset @temptm=@tminitwhile @temptm<=@tmendbegininsert into @mytbl select STCD,@temptmset @temptm=@temptm+1endreturnRETURNendGO
查看完整描述

2 回答

?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

这个问题用标致函数比较难,1楼调用标致函数的方法也是错误的,正确的方法应该是:
SELECT * FROM DBO.CaculateDailyTM()

我用游标实现 ,比较好理解:

create table tb1(zm char(8),sd datetime,ed datetime)
GO
insert into tb1 values('s1','1980-1-1','1980-2-1')
insert into tb1 values('s2','1992-2-1','1993-3-1')
GO
--建立测试数据

declare zm_cursor cursor fast_forward for select zm from tb1
declare @t1 datetime,@t2 datetime,@zm char(8)
declare @tb table(zm char(8),d datetime)
open zm_cursor
fetch next from zm_cursor into @zm
while @@fetch_status=0
begin
select @t1=sd,@t2=ed from tb1 where zm=@zm
while @t1<=@t2
begin
insert into @tb values(@zm,@t1)
set @t1=dateadd(day,1,@t1)
end
fetch next from zm_cursor into @zm
end
select * from @tb
close zm_cursor
deallocate zm_cursor

GO

DROP TABLE TB1

有问题HI我

这个问题用标致函数比较难,1楼调用标致函数的方法也是错误的,正确的方法应该是:
SELECT * FROM DBO.CaculateDailyTM()

我用游标实现 ,比较好理解:

create table tb1(zm char(8),sd datetime,ed datetime)
GO
insert into tb1 values('s1','1980-1-1','1980-2-1')
insert into tb1 values('s2','1992-2-1','1993-3-1')
GO
--建立测试数据

declare zm_cursor cursor fast_forward for select zm from tb1
declare @t1 datetime,@t2 datetime,@zm char(8)
declare @tb table(zm char(8),d datetime)
open zm_cursor
fetch next from zm_cursor into @zm
while @@fetch_status=0
begin
select @t1=sd,@t2=ed from tb1 where zm=@zm
while @t1<=@t2
begin
insert into @tb values(@zm,@t1)
set @t1=dateadd(day,1,@t1)
end
fetch next from zm_cursor into @zm
end
select * from @tb
close zm_cursor
deallocate zm_cursor

GO

DROP TABLE TB1

有问题HI我

这个问题用标致函数比较难,1楼调用标致函数的方法也是错误的,正确的方法应该是:
SELECT * FROM DBO.CaculateDailyTM()

我用游标实现 ,比较好理解:

create table tb1(zm char(8),sd datetime,ed datetime)
GO
insert into tb1 values('s1','1980-1-1','1980-2-1')
insert into tb1 values('s2','1992-2-1','1993-3-1')
GO
--建立测试数据

declare zm_cursor cursor fast_forward for select zm from tb1
declare @t1 datetime,@t2 datetime,@zm char(8)
declare @tb table(zm char(8),d datetime)
open zm_cursor
fetch next from zm_cursor into @zm
while @@fetch_status=0
begin
select @t1=sd,@t2=ed from tb1 where zm=@zm
while @t1<=@t2
begin
insert into @tb values(@zm,@t1)
set @t1=dateadd(day,1,@t1)
end
fetch next from zm_cursor into @zm
end
select * from @tb
close zm_cursor
deallocate zm_cursor

GO

DROP TABLE TB1

有问题HI我

这个问题用标致函数比较难,1楼调用标致函数的方法也是错误的,正确的方法应该是:
SELECT * FROM DBO.CaculateDailyTM()

我用游标实现 ,比较好理解:

create table tb1(zm char(8),sd datetime,ed datetime)
GO
insert into tb1 values('s1','1980-1-1','1980-2-1')
insert into tb1 values('s2','1992-2-1','1993-3-1')
GO
--建立测试数据

declare zm_cursor cursor fast_forward for select zm from tb1
declare @t1 datetime,@t2 datetime,@zm char(8)
declare @tb table(zm char(8),d datetime)
open zm_cursor
fetch next from zm_cursor into @zm
while @@fetch_status=0
begin
select @t1=sd,@t2=ed from tb1 where zm=@zm
while @t1<=@t2
begin
insert into @tb values(@zm,@t1)
set @t1=dateadd(day,1,@t1)
end
fetch next from zm_cursor into @zm
end
select * from @tb
close zm_cursor
deallocate zm_cursor

GO

DROP TABLE TB1

有问题HI我

这个问题用标致函数比较难,1楼调用标致函数的方法也是错误的,正确的方法应该是:
SELECT * FROM DBO.CaculateDailyTM()

我用游标实现 ,比较好理解:

create table tb1(zm char(8),sd datetime,ed datetime)
GO
insert into tb1 values('s1','1980-1-1','1980-2-1')
insert into tb1 values('s2','1992-2-1','1993-3-1')
GO
--建立测试数据

declare zm_cursor cursor fast_forward for select zm from tb1
declare @t1 datetime,@t2 datetime,@zm char(8)
declare @tb table(zm char(8),d datetime)
open zm_cursor
fetch next from zm_cursor into @zm
while @@fetch_status=0
begin
select @t1=sd,@t2=ed from tb1 where zm=@zm
while @t1<=@t2
begin
insert into @tb values(@zm,@t1)
set @t1=dateadd(day,1,@t1)
end
fetch next from zm_cursor into @zm
end
select * from @tb
close zm_cursor
deallocate zm_cursor

GO

DROP TABLE TB1

有问题HI我

这个问题用标致函数比较难,1楼调用标致函数的方法也是错误的,正确的方法应该是:
SELECT * FROM DBO.CaculateDailyTM()

我用游标实现 ,比较好理解:

create table tb1(zm char(8),sd datetime,ed datetime)
GO
insert into tb1 values('s1','1980-1-1','1980-2-1')
insert into tb1 values('s2','1992-2-1','1993-3-1')
GO
--建立测试数据

declare zm_cursor cursor fast_forward for select zm from tb1
declare @t1 datetime,@t2 datetime,@zm char(8)
declare @tb table(zm char(8),d datetime)
open zm_cursor
fetch next from zm_cursor into @zm
while @@fetch_status=0
begin
select @t1=sd,@t2=ed from tb1 where zm=@zm
while @t1<=@t2
begin
insert into @tb values(@zm,@t1)
set @t1=dateadd(day,1,@t1)
end
fetch next from zm_cursor into @zm
end
select * from @tb
close zm_cursor
deallocate zm_cursor

GO

DROP TABLE TB1

有问题HI我

这个问题用标致函数比较难,1楼调用标致函数的方法也是错误的,正确的方法应该是:
SELECT * FROM DBO.CaculateDailyTM()

我用游标实现 ,比较好理解:

create table tb1(zm char(8),sd datetime,ed datetime)
GO
insert into tb1 values('s1','1980-1-1','1980-2-1')
insert into tb1 values('s2','1992-2-1','1993-3-1')
GO
--建立测试数据

declare zm_cursor cursor fast_forward for select zm from tb1
declare @t1 datetime,@t2 datetime,@zm char(8)
declare @tb table(zm char(8),d datetime)
open zm_cursor
fetch next from zm_cursor into @zm
while @@fetch_status=0
begin
select @t1=sd,@t2=ed from tb1 where zm=@zm
while @t1<=@t2
begin
insert into @tb values(@zm,@t1)
set @t1=dateadd(day,1,@t1)
end
fetch next from zm_cursor into @zm
end
select * from @tb
close zm_cursor
deallocate zm_cursor

GO

DROP TABLE TB1

有问题HI我

这个问题用标致函数比较难,1楼调用标致函数的方法也是错误的,正确的方法应该是:
SELECT * FROM DBO.CaculateDailyTM()

我用游标实现 ,比较好理解:

create table tb1(zm char(8),sd datetime,ed datetime)
GO
insert into tb1 values('s1','1980-1-1','1980-2-1')
insert into tb1 values('s2','1992-2-1','1993-3-1')
GO
--建立测试数据

declare zm_cursor cursor fast_forward for select zm from tb1
declare @t1 datetime,@t2 datetime,@zm char(8)
declare @tb table(zm char(8),d datetime)
open zm_cursor
fetch next from zm_cursor into @zm
while @@fetch_status=0
begin
select @t1=sd,@t2=ed from tb1 where zm=@zm
while @t1<=@t2
begin
insert into @tb values(@zm,@t1)
set @t1=dateadd(day,1,@t1)
end
fetch next from zm_cursor into @zm
end
select * from @tb
close zm_cursor
deallocate zm_cursor

GO

DROP TABLE TB1

有问题HI我

这个问题用标致函数比较难,1楼调用标致函数的方法也是错误的,正确的方法应该是:
SELECT * FROM DBO.CaculateDailyTM()

我用游标实现 ,比较好理解:

create table tb1(zm char(8),sd datetime,ed datetime)
GO
insert into tb1 values('s1','1980-1-1','1980-2-1')
insert into tb1 values('s2','1992-2-1','1993-3-1')
GO
--建立测试数据

declare zm_cursor cursor fast_forward for select zm from tb1
declare @t1 datetime,@t2 datetime,@zm char(8)
declare @tb table(zm char(8),d datetime)
open zm_cursor
fetch next from zm_cursor into @zm
while @@fetch_status=0
begin
select @t1=sd,@t2=ed from tb1 where zm=@zm
while @t1<=@t2
begin
insert into @tb values(@zm,@t1)
set @t1=dateadd(day,1,@t1)
end
fetch next from zm_cursor into @zm
end
select * from @tb
close zm_cursor
deallocate zm_cursor

GO

DROP TABLE TB1

有问题HI我

这个问题用标致函数比较难,1楼调用标致函数的方法也是错误的,正确的方法应该是:
SELECT * FROM DBO.CaculateDailyTM()

我用游标实现 ,比较好理解:

create table tb1(zm char(8),sd datetime,ed datetime)
GO
insert into tb1 values('s1','1980-1-1','1980-2-1')
insert into tb1 values('s2','1992-2-1','1993-3-1')
GO
--建立测试数据

declare zm_cursor cursor fast_forward for select zm from tb1
declare @t1 datetime,@t2 datetime,@zm char(8)
declare @tb table(zm char(8),d datetime)
open zm_cursor
fetch next from zm_cursor into @zm
while @@fetch_status=0
begin
select @t1=sd,@t2=ed from tb1 where zm=@zm
while @t1<=@t2
begin
insert into @tb values(@zm,@t1)
set @t1=dateadd(day,1,@t1)
end
fetch next from zm_cursor into @zm
end
select * from @tb
close zm_cursor
deallocate zm_cursor

GO

DROP TABLE TB1

有问题HI我

这个问题用标致函数比较难,1楼调用标致函数的方法也是错误的,正确的方法应该是:
SELECT * FROM DBO.CaculateDailyTM()

我用游标实现 ,比较好理解:

create table tb1(zm char(8),sd datetime,ed datetime)
GO
insert into tb1 values('s1','1980-1-1','1980-2-1')
insert into tb1 values('s2','1992-2-1','1993-3-1')
GO
--建立测试数据

declare zm_cursor cursor fast_forward for select zm from tb1
declare @t1 datetime,@t2 datetime,@zm char(8)
declare @tb table(zm char(8),d datetime)
open zm_cursor
fetch next from zm_cursor into @zm
while @@fetch_status=0
begin
select @t1=sd,@t2=ed from tb1 where zm=@zm
while @t1<=@t2
begin
insert into @tb values(@zm,@t1)
set @t1=dateadd(day,1,@t1)
end
fetch next from zm_cursor into @zm
end
select * from @tb
close zm_cursor
deallocate zm_cursor

GO

DROP TABLE TB1


查看完整回答
反对 回复 2022-10-24
?
红颜莎娜

TA贡献1842条经验 获得超13个赞

select dbo.CaculateDailyTM(站名, 开始时间,结束时间) from 表1

查看完整回答
反对 回复 2022-10-24
  • 2 回答
  • 0 关注
  • 114 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号