数据库有一个sign_dates数据类型为datetime的字段,现在有一个需求,
我现在页面有2个输入框,选择时间范围,比如我选择了2010年9月5号到2010年9月7号的时间段
那么在数据库里就要生成5,6,7号3天的日期记录,这么用sql该怎么写,我的意思是用一天sql语句!
我现在页面有2个输入框,选择时间范围,比如我选择了2010年9月5号到2010年9月7号的时间段
那么在数据库里就要生成5,6,7号3天的日期记录,这么用sql该怎么写,我的意思是用一天sql语句!
调试欢乐多
declare @t1 datetime,@t2 datetime,@t3 datetime
set @t1 = '2010-01-01'
set @t2 = '2010-04-01'
set @t3 = @t1
while datediff(d,@t3,@t2) >=0
begin
select @t3 = dateadd(d,1,@t3)
--print convert(varchar(10),@t3,120)
insert into tb values(convert(varchar(10),@t3,120),其他列值)
end
可以注释掉插入语句,去掉print语句的注释看效果。
from master..spt_values
where type='P' and dateadd(day,number,'20100905')<='20100907'
/*
-----------------------
2010-09-05 00:00:00.000
2010-09-06 00:00:00.000
2010-09-07 00:00:00.000
*/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,wcd>
-- Create date: <Create 2010.9.2>
-- Description: <Description ,请假一天以上生成多条签到表记录,>
-- =============================================
CREATE PROCEDURE [CreateManySignByLeave]
-- Add the parameters for the stored procedure here
@beginTime datetime,
@endTime datetime,
@type int --请假类型
AS
BEGIN
DECLARE @signTime datetime
set @signTime=@beginTime
while datediff(d,@signTime,@endTime) >=0
begin
select @signTime = dateadd(d,1,@signTime)
insert into l_sign(sign_date,in_state,af_state,out_state)
values(convert(varchar(10),@signTime,120),@type,@type,@type)
endEND
GO为什么我的datetime类型,当我选择起始时间是2010-9-4,结束时间2010-9-7
它会插入的是2010-9-5到2010-9-8的时间呢?