一次性插入一年时间

csxuedn 2012-07-05 02:37:53
能不能请教各位高手一个问题,怎样在SQL Server中一次性插入一年的时间呢?有没有这样的系统存储过程或者函数?

比如说一次性插入
列名:年份 月份 日次
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年的时间
...全文
182 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复

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
csxuedn 2012-07-05
  • 打赏
  • 举报
回复
谢谢好多好心的高手啊……

刚才需求没说清楚,不好意思啊……

还有另外一张表tab1 只有一列:
ID
1763
2343
3653
4346
3456
7584
4542
……

需求是插入时间的同时前边要加上这一列的

需要格式如下:
序列 年份 月份 日次
1763 2012 1 1
1763 2012 1 2
1763 2012 1 3
1763 2012 1 4
……

2343 2012 1 1
2343 2012 1 2
2343 2012 1 3
2343 2012 1 4
……


3653 2012 1 1
3653 2012 1 2
3653 2012 1 3
3653 2012 1 4
……
……
再次感谢这么多好心的技术达人……








Felixzhaowenzhong 2012-07-05
  • 打赏
  • 举报
回复
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'
Felixzhaowenzhong 2012-07-05
  • 打赏
  • 举报
回复
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
*/
筱筱澄 2012-07-05
  • 打赏
  • 举报
回复
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
*/
liangCK 2012-07-05
  • 打赏
  • 举报
回复
我晕,还搞复杂了。
liangCK 2012-07-05
  • 打赏
  • 举报
回复
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.rowid
Mr_Nice 2012-07-05
  • 打赏
  • 举报
回复
SELECT DATEADD(dd,number,'2012-01-01')
FROM master..spt_values
WHERE type ='P' AND DATEADD(dd,number,'2012-01-01') <'2013-01-01'


百年树人 2012-07-05
  • 打赏
  • 举报
回复
系统没有现成的,需要自己写
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'
Mr_Nice 2012-07-05
  • 打赏
  • 举报
回复
master..spt_values

可以使用这个序列表

22,294

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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