就是比如1月1号的第一条记录是0101001,第二条是0101002...1月2号的第一条记录是0102001..1月20日的第21条记录是0120021...
这样的形式,数据会保存在数据库中,也就是说如果是第21条记录当天肯定已经存过20条了.可以读,但最好不用再新建数据库.
如果有比较方便的实现形式,麻烦请写一下或贴一下事例,最好详细一点,谢谢.
这样的形式,数据会保存在数据库中,也就是说如果是第21条记录当天肯定已经存过20条了.可以读,但最好不用再新建数据库.
如果有比较方便的实现形式,麻烦请写一下或贴一下事例,最好详细一点,谢谢.
每次插入新记录前 根据当前日期判断有没有 yymmdd001没有就插入有就yymmdd002 类推
注意该列要设置为 唯一 约束顺便问一下 用一个自动增长列 和 一个日期列 不可以么?
判断的时候用year(日期列名)=year(查询日期)and month(日期列名)=month(查询日期)and day(日期列名)=day(查询日期)
如果长度保持7位,并且每天记录数不大于999,可以用如下方法:create table testTb(Id varchar(8))
insert into testTb
select '0101001'
union all select '0101002'
union all select '0102001'
union all select '0102002'
declare @MaxId varchar(8)
select @MaxId=max(id) from testTb where left(Id,4)=replace(convert(varchar(5), getdate(),101),'/','')
print @MaxId
declare @NewId varchar(8)
SET @NewId = right('00'+rtrim(Cast(@MaxId as bigint)+1),7)
print @NewIddrop table testTb--(4 row(s) affected)
--0102002
--0102003
那后缀问题如何解决.其实我觉得比较麻烦的就是每天要更新的后缀.
create table testTb(Id varchar(10))
insert into testTb
select '0701010001'
union all select '0701010002'
union all select '0701020001'
union all select '0701020002'
union all select '0701020021'
declare @MaxId varchar(10)
select @MaxId=max(id) from testTb where left(Id,6)=replace(convert(varchar(6), getdate(),2),'','')
print @MaxId
declare @NewId varchar(10)
SET @NewId = right('000'+rtrim(Cast(@MaxId as bigint)+1),10)
print @NewIddrop table testTb
create table testTb(Id varchar(10))
insert into testTb
select '0801010001'
union all select '0801010002'
union all select '0801020001'
union all select '0801020002'
union all select '0801020021'
declare @MaxId varchar(10)
select @MaxId=max(id) from testTb where left(Id,6)=convert(varchar(6), getdate(),12)
print @MaxId
declare @NewId varchar(10)
SET @NewId = right('00'+rtrim(Cast(@MaxId as bigint)+1),10)
print @NewId drop table testTb--(5 row(s) affected)
--0801020021
--0801020022
GOINSERT tb SELECT 'aa',CONVERT(VARCHAR(8),GETDATE(),112) + RIGHT('000' + RTRIM(COUNT(*)+1),3) FROM tb WHERE LEFT(dateSerial,8)=CONVERT(VARCHAR(8),GETDATE(),112)
INSERt tb SELECT 'bb',CONVERT(VARCHAR(8),GETDATE(),112) + RIGHT('000' + RTRIM(COUNT(*)+1),3) FROM tb WHERE LEFT(dateSerial,8)=CONVERT(VARCHAR(8),GETDATE(),112)
INSERt tb SELECT 'cc',CONVERT(VARCHAR(8),GETDATE(),112) + RIGHT('000' + RTRIM(COUNT(*)+1),3) FROM tb WHERE LEFT(dateSerial,8)=CONVERT(VARCHAR(8),GETDATE(),112)
SELECT * FROM tb
/*
id myValue DateSerial
1 aa 20080102001
2 bb 20080102002
3 cc 20080102003
*/GO
DROP TABLE tb
GO