34,838
社区成员




declare @table table(num varchar(20),name varchar(20))
declare @begin varchar(10)
declare @y int
declare @m int
declare @d int
set @m=month(getdate())
set @y=year(getdate())
if ((@y%4=0 and @y%100 !=0) or (@y%400=0))
begin
if (@m=2)
set @d=29
else if (@m=1 or @m=3 or @m=5 or @m=7 or @m=8 or @m=10 or @m=12)
set @d=31
else
set @d=30
end
else
begin
if (@m=2)
set @d=28
else if (@m=1 or @m=3 or @m=5 or @m=7 or @m=8 or @m=10 or @m=12)
set @d=31
else
set @d=30
end
set @begin=convert(char(4),@y)+'-'+convert(char(2),@m)+'-01'
declare @num varchar(20)
declare @i int
declare @ii char(2)
set @i=0
while @i <@d
begin
begin
if @i<10
set @num=rtrim(convert(char(11),dateadd(day,@i,convert(datetime,@begin)),112))+'0'+convert(char,@i)
else
set @num=rtrim(convert(char(11),dateadd(day,@i,convert(datetime,@begin)),112))+convert(char,@i)
end
insert into @table
select @num,@i
set @i=@i+1
end
select * from @table
/*
num name
-------------------------
2008030100 0
2008030201 1
2008030302 2
2008030403 3
2008030504 4
2008030605 5
2008030706 6
2008030807 7
2008030908 8
2008031009 9
2008031110 10
2008031211 11
2008031312 12
2008031413 13
2008031514 14
2008031615 15
2008031716 16
2008031817 17
2008031918 18
2008032019 19
2008032120 20
2008032221 21
2008032322 22
2008032423 23
2008032524 24
2008032625 25
2008032726 26
2008032827 27
2008032928 28
2008033029 29
2008033130 30
*/
create table tb(id varchar(20) default dbo.getid(),name varchar(20))
create view dt
as
select getdate() as dt
create function getid()
returns varchar(20)
as
begin
declare @id varchar(20),@dt datetime
select @dt=dt from dt
select @id=replace(convert(varchar(10),@dt,120),'-','')+ltrim(isnull(max(cast(right(id,len(id)-7) as int)),0)+1) from tb
return @id
end
insert into tb (name) select 'aa'
insert into tb (name) select 'bb'
insert into tb (name) select 'cc'
insert into tb (name) select 'dd'
insert into tb (name) select 'ee'
insert into tb (name) select 'ff'
insert into tb (name) select 'gg'
insert into tb (name) select 'hh'
insert into tb (name) select 'ii'
insert into tb (name) select 'jj'
insert into tb (name) select 'kk'
insert into tb (name) select 'll'
insert into tb (name) select 'mm'
insert into tb (name) select 'nn'
select * from tb
200803101 aa
200803102 bb
200803103 cc
200803104 dd
200803105 ee
200803106 ff
200803107 gg
200803108 hh
200803109 ii
2008031010 jj
2008031011 kk
2008031012 ll
2008031013 mm
2008031014 nn