幫忙寫個數據庫初始化sql,把一個時間段內的周六日插進某張表;萬分感謝!


幫忙寫個數據庫初始化sql,把一個時間段內的周六日插進某張表;萬分感謝!

table1表包含字段:主鍵:ID nvarchar(50);Week datetime;Remark nvarchar(50)

13 个解决方案

#1


--sql 2000
declare @sdate datetime
declare @edate datetime
set @sdate = '2008-10-15 00:00:000'
set @edate = '2009-02-10 00:00:000'


select 
    dateadd(dd,num,@sdate) dt
from 
    (select isnull((select count(1) from sysobjects where id<t.id),0) as num from sysobjects t) a
where datepart(weekday,dateadd(dd,num,@sdate)) = 7
    dateadd(dd,num,@sdate)<=@edate

#2


set datefirst 1

insert into table2 (week) select DATEPART(weekday,week) as week from table1 where 
week between 'xx and 'xx'

#3



CREATE TABLE #table1 (ID nvarchar(50),[Week] datetime,Remark nvarchar(50))

DECLARE @BeginDate  DATETIME
DECLARE @EndDate    DATETIME

SET @BeginDate ='2011-01-01'
SET @EndDate ='2011-10-01'

WHILE @BeginDate <= @EndDate
BEGIN
    IF DATENAME(DW,@BeginDate) IN ('Saturday','Sunday')
        INSERT INTO #table1 (ID,[Week],Remark) VALUES(CONVERT(VARCHAR(10),@BeginDate,120), @BeginDate, DATENAME(DW,@BeginDate))
    
    SET @BeginDate = @BeginDate + 1
END

SELECT * FROM #table1

#4


declare @startdate datetime,@enddate datetime
set @startdate='2011-08-01'
set @enddate='2011-09-20'
--如要插入,在此加 insert into tb
select dateadd(d,number,@startdate) dt 
from master..spt_values
where type='p' and number<=datediff(d,@startdate,@enddate)
and datepart(dw,dateadd(d,number,@startdate)) in(1,7)
/*
dt
-----------------------
2011-08-06 00:00:00.000
2011-08-07 00:00:00.000
2011-08-13 00:00:00.000
2011-08-14 00:00:00.000
2011-08-20 00:00:00.000
2011-08-21 00:00:00.000
2011-08-27 00:00:00.000
2011-08-28 00:00:00.000
2011-09-03 00:00:00.000
2011-09-04 00:00:00.000
2011-09-10 00:00:00.000
2011-09-11 00:00:00.000
2011-09-17 00:00:00.000
2011-09-18 00:00:00.000

(14 行受影響)

*/

#5


set datefirst 1

insert into
 table2 (week) 
select
 DATEPART(weekday,week) as week from table1 where 
week
 between 'xx' and 'xx'
and
 DATEPART(weekday,week) in (1,7)

#6


謝謝你們的回復。。。我都去試試!!!

#7



declare @s datetime='2011-08-25'
declare @e datetime='2011-09-26'

select dateadd(dd,number,@s) from master..spt_values where type='p' and number<=DATEDIFF(DD,@s,@e) 
and DATEPART(WEEKDAY, dateadd(dd,number,@s)) in (1,7)


#8


引用 4 樓 qianjin036a 的回復:
SQL code

declare @startdate datetime,@enddate datetime
set @startdate='2011-08-01'
set @enddate='2011-09-20'
--如要插入,在此加 insert into tb
select dateadd(d,number,@startdate) dt 
from master..spt_……
這里能講解下嗎?

#9


select dateadd(d,number,@startdate) dt 
from master..spt_values  
--這個表是2005的一個系統表,它存放一些 number,其中type='p'的是一個自然數序列上面用此序列求得從@startdate 向后的日期
where type='p' and number<=datediff(d,@startdate,@enddate)
--日期限制在最大不超過 @enddate
and datepart(dw,dateadd(d,number,@startdate)) in(1,7)
--從上面的日期序列里篩選出周日(1)和周六(7)

#10


你試試:
select * from master..spt_values
就全明白了.

#11


引用 3 樓 xiaoliaoyun 的回復:
SQL code


CREATE TABLE #table1 (ID nvarchar(50),[Week] datetime,Remark nvarchar(50))

DECLARE @BeginDate  DATETIME
DECLARE @EndDate    DATETIME

SET @BeginDate ='2011-01-01'
SET @EndDate ='2……


貌似要把 if 去掉才能執行 , 這樣就要再把不是周六日的刪除 。 我之前也遇到過加入 if 語句后執行不了的情況 , 那么該怎樣把條件加進去呢 ?

#12


嗯嗯!!謝謝你們!!

#13


引用 7 樓 jinfengyiye 的回復:
SQL code


declare @s datetime='2011-08-25'
declare @e datetime='2011-09-26'

select dateadd(dd,number,@s) from master..spt_values where type='p' and number<=DATEDIFF(DD,@s,@e) 
and DATEPART(WE……

@s和 @e值分別設置為'2011-08-25', '2050-09-26' 貌似取不到那么長時間啊!!求解

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com