知道起始日期和结束日期,怎么循环生成各个日期到数据库中,
版主给我的建议是用循环:
-- 建测试表
create table datelist(xz datetime)
-- 插入数据
declare @begindate datetime,@enddate datetime
select @begindate='2014/05/01', -- 起始日期
@enddate='2014/06/17' -- 结束日期
while(@begindate<=@enddate)
begin
insert into datelist(xz) values(@begindate)
select @begindate=dateadd(d,1,@begindate)
end
我补充的问题是,假如给的是起始时间和结束时间呢?
比如:
-- 插入数据
declare @begindate datetime,@enddate datetime
select @begindate='2014/05/01 10:10:00', -- 起始日期
@enddate='2014/05/05 15:00:00' -- 结束日期
而我要的结果是:
2014-05-01 10:10:00.000
2014-05-02 00:00:00.000
2014-05-03 00:00:00.000
2014-05-04 00:00:00.000
2014-05-05 15:00:00.000
因为5月1日是从10点开始的,而结束是在5日的15点结束。
------解决方案--------------------
declare @sdate datetime
declare @edate datetime
set @sdate ='2014/05/01 10:10:00'
set @edate ='2014/05/05 15:00:00'
select
dateadd(dd,num,@sdate)
from
(select isnull((select count(1) from sysobjects where id <t.id),0) as num from sysobjects t) a
where
dateadd(dd,num,@sdate) <=@edate
-------------------------------------------------------------------------------------------------------------
declare @startdate datetime,@enddate datetime
set @startdate='2014/05/01 10:10:00'
set @enddate='2014/05/05 15:00:00'
select convert(varchar(10),dateadd(day,number,@startdate),120)
from
master..spt_values
where
datediff(day,dateadd(day,number,@startdate), @enddate)>=0
and number>0
and type='p'
------解决方案--------------------
DECLARE @StartDate DATETIME ='2014/05/01 10:10:00'
,@EndDate DATETIME ='2014/05/05 15:00:00'
IF OBJECT_ID('tempdb..#EveryDays','U') IS NOT NULL DROP TABLE #EveryDays
CREATE TABLE #EveryDays
(
Dates DATETIME
)
INSERT INTO #EveryDays VALUES(@StartDate)
SET @StartDate=CAST(CONVERT(CHAR(8),DATEADD(DAY,1,@StartDate),112) AS DATETIME)
WHILE @StartDate<CAST(CONVERT(CHAR(8),@EndDate,112) AS DATETIME)
BEGIN
INSERT INTO #EveryDays VALUES(@StartDate )
SET @StartDate=DATEADD(DAY,1,@StartDate)
END
INSERT INTO #EveryDays VALUES(@EndDate)
SELECT * FROM #EveryDays
------解决方案--------------------
-- 建测试表
create table datelist(xz datetime)
-- 插入数据
declare @begindate datetime,@enddate datetime
select @begindate='2014/05/01 10:10:00', -- 起始日期
@enddate='2014/05/05 15:00:00' -- 结束日期
while(@begindate<=@enddate)
begin
insert into datelist(xz)
select case when datediff(d,@begindate,@enddate)=0 then @enddate else @begindate end
select @begindate=dateadd(d,1,convert(varchar,@begindate,111))
end
-- 结果
select * from datelist
/*
xz
-----------------------
2014-05-01 10:10:00.000
2014-05-02 00:00:00.000
2014-05-03 00:00:00.000
2014-05-04 00:00:00.000
2014-05-05 15:00:00.000
(5 row(s) affected)
*/
------解决方案--------------------
declare @begindate datetime,@enddate datetime
select @begindate='2014/05/01 10:10:00', -- 起始日期
@enddate='2014/06/17 15:30:00' -- 结束日期
insert into datelist select @begindate
insert into datelist select @enddate
while @begindate< DateAdd(d,-2,@enddate)
begin
insert into datelist select CONVERT(varchar(100), DateAdd(d,1,@begindate), 23)
set @begindate=DateAdd(d,1,@begindate)
end
go
select * from datelist order by xz desc
我这个稍微笨一点的方法你试试
------解决方案--------------------