22,294
社区成员
发帖
与我相关
我的任务
分享
declare @date1 date
declare @date2 date
set @date1='2012-01-01'
set @date2='2012-12-31'
;with t
as(
select
px=ROW_NUMBER()over(order by number),
DATEADD(DD,number,@date1) as [date]
from
master..spt_values
where
number between 0 and DATEDIFF(DD,@date1,@date2)
and type='p'
),
m as(
select
px,
YEAR([date]) as [year],
MONTH([date]) as [month],
DAY([date]) as [day]
into #tbl
from
t
),n
as(
select
px=ROW_NUMBER()over(order by ID),
ID
from
另外一张表
)
insert tb
select
n.id,
m.[year],
m.[month],
m.[day]
from
m
inner join
n
on
m.px=n.px
create table tb (year int,month int, day int)
go
insert into tb
SELECT year(DATEADD(dd,number,'2012-01-01')),MONTH(DATEADD(dd,number,'2012-01-01')),DAY(DATEADD(dd,number,'2012-01-01'))
FROM master..spt_values
WHERE type ='P' AND DATEADD(dd,number,'2012-01-01') <'2013-01-01'
create table tb (year int,month int, day int)
go
set datefirst 1
declare @date_day datetime
set @date_day ='2012-01-05' ----手动输入(替换)每个月的月数即可
declare @month_day int
set @month_day=datepart(dd,dateadd(dd,-1,dateadd(mm,1,cast(cast(year(@date_day) as varchar)+'-'+cast(month(@date_day) as varchar)+'-01' as datetime))))
declare @month_first_day datetime
set @month_first_day= convert(varchar(10),dateadd(dd,-DatePart(day,dateadd(dd,-1,@date_day)),@date_day),120)
insert into tb
select year(dateadd(day,number,@month_first_day)),MONTH(dateadd(day,number,@month_first_day)),DAY(dateadd(day,number,@month_first_day))
from master.dbo.spt_values where type='p' and number <@month_day
go
select * from tb
/*
year month day
2012 1 1
2012 1 2
2012 1 3
2012 1 4
2012 1 5
2012 1 6
2012 1 7
2012 1 8
2012 1 9
2012 1 10
2012 1 11
2012 1 12
2012 1 13
2012 1 14
2012 1 15
2012 1 16
2012 1 17
2012 1 18
2012 1 19
2012 1 20
2012 1 21
2012 1 22
2012 1 23
2012 1 24
2012 1 25
2012 1 26
2012 1 27
2012 1 28
2012 1 29
2012 1 30
2012 1 31
*/DECLARE @d DATETIME
SET @d='2012-01-01'
SELECT YEAR(DATEADD(dd,number,@d)),MONTH(DATEADD(dd,number,@d)),DAY(DATEADD(dd,number,@d))
FROM master..spt_values
WHERE type='p'
AND number BETWEEN 1 AND DATEDIFF(dd,@d,DATEADD(yy,1,@d))-1
declare @date1 date
declare @date2 date
set @date1='2012-01-01'
set @date2='2012-12-31'
;with t
as(
select
DATEADD(DD,number,@date1) as [date]
from
master..spt_values
where
number between 0 and DATEDIFF(DD,@date1,@date2)
and type='p'
)
select
YEAR([date]) as [year],
MONTH([date]) as [month],
DAY([date]) as [day]
into #tbl
from
t
select * from #tbl
/*
year month day
2012 1 1
2012 1 2
2012 1 3
2012 1 4
2012 1 5
2012 1 6
2012 1 7
2012 1 8
2012 1 9
2012 1 10
2012 1 11
2012 1 12
2012 1 13
2012 1 14
2012 1 15
2012 1 16
2012 1 17
2012 1 18
2012 1 19
2012 1 20
2012 1 21
2012 1 22
2012 1 23
2012 1 24
2012 1 25
2012 1 26
2012 1 27
2012 1 28
2012 1 29
2012 1 30
2012 1 31
2012 2 1
2012 2 2
2012 2 3
2012 2 4
2012 2 5
2012 2 6
2012 2 7
2012 2 8
2012 2 9
2012 2 10
2012 2 11
2012 2 12
2012 2 13
2012 2 14
2012 2 15
2012 2 16
2012 2 17
2012 2 18
2012 2 19
2012 2 20
2012 2 21
2012 2 22
2012 2 23
2012 2 24
2012 2 25
2012 2 26
2012 2 27
2012 2 28
2012 2 29
2012 3 1
2012 3 2
2012 3 3
2012 3 4
2012 3 5
2012 3 6
2012 3 7
2012 3 8
2012 3 9
2012 3 10
2012 3 11
2012 3 12
2012 3 13
2012 3 14
2012 3 15
2012 3 16
2012 3 17
2012 3 18
2012 3 19
2012 3 20
2012 3 21
2012 3 22
2012 3 23
2012 3 24
2012 3 25
2012 3 26
2012 3 27
2012 3 28
2012 3 29
2012 3 30
2012 3 31
2012 4 1
2012 4 2
2012 4 3
2012 4 4
2012 4 5
2012 4 6
2012 4 7
2012 4 8
2012 4 9
2012 4 10
2012 4 11
2012 4 12
2012 4 13
2012 4 14
2012 4 15
2012 4 16
2012 4 17
2012 4 18
2012 4 19
2012 4 20
2012 4 21
2012 4 22
2012 4 23
2012 4 24
2012 4 25
2012 4 26
2012 4 27
2012 4 28
2012 4 29
2012 4 30
2012 5 1
2012 5 2
2012 5 3
2012 5 4
2012 5 5
2012 5 6
2012 5 7
2012 5 8
2012 5 9
2012 5 10
2012 5 11
2012 5 12
2012 5 13
2012 5 14
2012 5 15
2012 5 16
2012 5 17
2012 5 18
2012 5 19
2012 5 20
2012 5 21
2012 5 22
2012 5 23
2012 5 24
2012 5 25
2012 5 26
2012 5 27
2012 5 28
2012 5 29
2012 5 30
2012 5 31
2012 6 1
2012 6 2
2012 6 3
2012 6 4
2012 6 5
2012 6 6
2012 6 7
2012 6 8
2012 6 9
2012 6 10
2012 6 11
2012 6 12
2012 6 13
2012 6 14
2012 6 15
2012 6 16
2012 6 17
2012 6 18
2012 6 19
2012 6 20
2012 6 21
2012 6 22
2012 6 23
2012 6 24
2012 6 25
2012 6 26
2012 6 27
2012 6 28
2012 6 29
2012 6 30
2012 7 1
2012 7 2
2012 7 3
2012 7 4
2012 7 5
2012 7 6
2012 7 7
2012 7 8
2012 7 9
2012 7 10
2012 7 11
2012 7 12
2012 7 13
2012 7 14
2012 7 15
2012 7 16
2012 7 17
2012 7 18
2012 7 19
2012 7 20
2012 7 21
2012 7 22
2012 7 23
2012 7 24
2012 7 25
2012 7 26
2012 7 27
2012 7 28
2012 7 29
2012 7 30
2012 7 31
2012 8 1
2012 8 2
2012 8 3
2012 8 4
2012 8 5
2012 8 6
2012 8 7
2012 8 8
2012 8 9
2012 8 10
2012 8 11
2012 8 12
2012 8 13
2012 8 14
2012 8 15
2012 8 16
2012 8 17
2012 8 18
2012 8 19
2012 8 20
2012 8 21
2012 8 22
2012 8 23
2012 8 24
2012 8 25
2012 8 26
2012 8 27
2012 8 28
2012 8 29
2012 8 30
2012 8 31
2012 9 1
2012 9 2
2012 9 3
2012 9 4
2012 9 5
2012 9 6
2012 9 7
2012 9 8
2012 9 9
2012 9 10
2012 9 11
2012 9 12
2012 9 13
2012 9 14
2012 9 15
2012 9 16
2012 9 17
2012 9 18
2012 9 19
2012 9 20
2012 9 21
2012 9 22
2012 9 23
2012 9 24
2012 9 25
2012 9 26
2012 9 27
2012 9 28
2012 9 29
2012 9 30
2012 10 1
2012 10 2
2012 10 3
2012 10 4
2012 10 5
2012 10 6
2012 10 7
2012 10 8
2012 10 9
2012 10 10
2012 10 11
2012 10 12
2012 10 13
2012 10 14
2012 10 15
2012 10 16
2012 10 17
2012 10 18
2012 10 19
2012 10 20
2012 10 21
2012 10 22
2012 10 23
2012 10 24
2012 10 25
2012 10 26
2012 10 27
2012 10 28
2012 10 29
2012 10 30
2012 10 31
2012 11 1
2012 11 2
2012 11 3
2012 11 4
2012 11 5
2012 11 6
2012 11 7
2012 11 8
2012 11 9
2012 11 10
2012 11 11
2012 11 12
2012 11 13
2012 11 14
2012 11 15
2012 11 16
2012 11 17
2012 11 18
2012 11 19
2012 11 20
2012 11 21
2012 11 22
2012 11 23
2012 11 24
2012 11 25
2012 11 26
2012 11 27
2012 11 28
2012 11 29
2012 11 30
2012 12 1
2012 12 2
2012 12 3
2012 12 4
2012 12 5
2012 12 6
2012 12 7
2012 12 8
2012 12 9
2012 12 10
2012 12 11
2012 12 12
2012 12 13
2012 12 14
2012 12 15
2012 12 16
2012 12 17
2012 12 18
2012 12 19
2012 12 20
2012 12 21
2012 12 22
2012 12 23
2012 12 24
2012 12 25
2012 12 26
2012 12 27
2012 12 28
2012 12 29
2012 12 30
2012 12 31
*/
select 2012 as year,a.rowid as month,b.rowid as day
from (select top(12) rowid=row_number() over(order by getdate()) from sys.columns) as a,
(select top(31) rowid=row_number() over(order by getdate()) from sys.columns) as b
WHERE ISDATE('2012-'+RTRIM(a.rowid)+'-'+RTRIM(b.rowid))=1
ORDER BY a.rowidSELECT DATEADD(dd,number,'2012-01-01')
FROM master..spt_values
WHERE type ='P' AND DATEADD(dd,number,'2012-01-01') <'2013-01-01'
declare @y int
set @y=2012
select dateadd(dd,number,ltrim(@y)+'-01-01')
from master..spt_values
where type='P'
and dateadd(dd,number,ltrim(@y)+'-01-01')<=ltrim(@y)+'-12-31'