时间问题,在线等

JJ77 2003-12-31 01:26:48
已知初始日期和结束日期,如何把这个时期内的所有天数取出来存进新表中?
如:初始日期:2003-12-1 结束时间:2004-1-1
新表:indate
2003-12-1
2003-12-2
2003-12-3
.
.
.
2004-1-1
...全文
105 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
JJ77 2004-01-01
  • 打赏
  • 举报
回复
多谢大家,我另开新贴,还是请大家多关注,并祝元旦快乐

http://expert.csdn.net/Expert/topic/2623/2623705.xml?temp=.543133
JJ77 2004-01-01
  • 打赏
  • 举报
回复
多谢各位,之前临时有事,被领导叫到别处去了,都怪我没说清楚,sorry
取的数据是天数,还有在Access下实现
zjcxc 元老 2003-12-31
  • 打赏
  • 举报
回复
--调用自定义实现你的要求

insert into indate(日期字段)
select dt from dbo.f_getdate('2003-12-1','2004-1-1')
zjcxc 元老 2003-12-31
  • 打赏
  • 举报
回复
--写个自定义函数来解决:

/*--
得到两个日期之间的日期列表

--调用示例
select * from dbo.f_getdate('2003-01-01','2003-01-20')
*/

if exists(select 1 from sysobjects where id=object_id('f_getdate') and objectproperty(id,'IsInlineFunction')=0)
drop function f_getdate

go
create function f_getdate(@dt1 datetime,@dt2 datetime)
returns @re table(id int identity(0,1),dt datetime)
as
begin
declare @i int
select @i=datediff(day,@dt1,@dt2)+1

while @i>1
begin
insert into @re(dt) select top 100 @dt1 from syscolumns
set @i=@i-100
end
delete from @re where id>datediff(day,@dt1,@dt2)

update @re set dt=dateadd(day,id,dt)
return
end
go

1ssp 2003-12-31
  • 打赏
  • 举报
回复
你要取出的数据是天数,还是日期。我没有明白
能否举个例子。

insert into t select * from indate where between @startdate and @enddate
leeboyan 2003-12-31
  • 打赏
  • 举报
回复
select indate into temptable from table where indate>='2003-12-1' and indate<='2004-1-1'
leeboyan 2003-12-31
  • 打赏
  • 举报
回复
datediff 函数

1.DATEDIFF ( datepart , startdate , enddate )
datepart参数:日期部分 缩写
year yy, yyyy
quarter qq, q
Month mm, m
dayofyear dy, y
Day dd, d
Week wk, ww
Hour hh
minute mi, n
second ss, s
millisecond ms

startdate:计算的起始日期
enddate:计算的终止日期
2.功能:按设定参数的格式返回计算的终止日期与计算的起始日期的差值
3.例:select datediff(d,字段名,getdate()) from table
结果:返回字段名与当前系统时间天数的差值
pbsql 2003-12-31
  • 打赏
  • 举报
回复
不好意思。打个补丁:
declare @time_begin datetime,@time_end datetime,@count varchar(10)
set @time_begin='2003-12-1'
set @time_end='2004-1-1'
set @count=cast(datediff(day,@time_begin,@time_end) as varchar(10))
exec('
select top '+@count+' identity(int,0,1) id into #t from sysobjects a,sysobjects b,sysobjects c
select dateadd(day,id,'''+@time_begin+''') from #t
drop table #t
')
pbsql 2003-12-31
  • 打赏
  • 举报
回复
exec('
declare @time_begin datetime,@time_end datetime,@count int
set @time_begin=''2003-12-1''
set @time_end=''2004-1-1''
set @count=datediff(day,@time_begin,@time_end)
select identity(int,1,1) id into #t from sysobjects a,sysobjects b,sysobjects c
select dateadd(day,id,@time_begin) from #t
drop table #t
')
txlicenhe 2003-12-31
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/2462/2462691.xml?temp=5.807132E-02
[交流]一个简单的考勤系统

/*********如下存储过程用于批量录入资料**************/
create Procedure AddWorkCalendar @BDate SmallDateTime,@EDate SmallDateTime
As
Declare @CDate SmallDateTime
Declare @Flag1 Bit
Declare @Flag2 Bit
Declare @Flag3 Bit

Set @CDate = @BDate
If Exists (Select * from calendar Where cld_rq Between @BDate And @EDate)
Begin
Raiserror('已有该范围的资料,请核对开始日期和结束日期!!!',16,-1)
Return
End
While @CDate <= @EDate
Begin
Set @Flag1 = (Case When DatePart(WeekDay,@CDate) in (1,7) then 0 Else 1 End)
Set @Flag2 = (Case When DatePart(WeekDay,@CDate)=1 then 0 Else 1 End)
Set @Flag3 = 1
Insert calendar Values(@CDate,@Flag,@Flag1,@Flag2)
Set @CDate = DateAdd(Day,1,@CDate)
End

/******** Usage:
Exec AddWorkCalendar '20031101','20031130'
*********/
ropriest 2003-12-31
  • 打赏
  • 举报
回复
是要从别的表取出这段日期来,还是要自动生成这段日期内的记录,insert到indate表中?

34,590

社区成员

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

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