就是比如1月1号的第一条记录是0101001,第二条是0101002...1月2号的第一条记录是0102001..1月20日的第21条记录是0120021...
这样的形式,数据会保存在数据库中,也就是说如果是第21条记录当天肯定已经存过20条了.可以读,但最好不用再新建数据库.
如果有比较方便的实现形式,麻烦请写一下或贴一下事例,最好详细一点,谢谢.

解决方案 »

  1.   

    也不是不可以做啊
    每次插入新记录前 根据当前日期判断有没有 yymmdd001没有就插入有就yymmdd002 类推
    注意该列要设置为 唯一 约束顺便问一下 用一个自动增长列 和 一个日期列 不可以么?
      

  2.   

    如果你只是想知道今天的记录有多少条了。不用设置递增序列号的就记个日期就行了
    判断的时候用year(日期列名)=year(查询日期)and month(日期列名)=month(查询日期)and day(日期列名)=day(查询日期)
      

  3.   

    或者 select max(convert(int,substring(你现在的列名,5,len(你现在的列名)-4)))就可以查询现在有多少条记录了
      

  4.   

    没年份?
    如果长度保持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
      

  5.   

    是新增加的功能,本来是个string自填的字段,现在要求按顶楼的方法自动生成,最好还是不希望改数据库.我考虑下3楼的方法,如有更好的请跟贴.
      

  6.   

    加个datetime字段 设置默认值 getdate 最少改动了
      

  7.   

    加个datetime字段   设置默认值   getdate   最少改动了==================
    那后缀问题如何解决.其实我觉得比较麻烦的就是每天要更新的后缀.
      

  8.   

    刚才又重新试了下4楼的方法,感觉改编成存储过程可以解决我的问题.不过本人小改编了一下就不正常了,请看下哪个地方写错了?现在数据组成是年(两位)月日+四位顺序码.
    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
      

  9.   


    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
      

  10.   

    CREATE TABLE tb(id INT IDENTITY(1,1),myValue VARCHAR(20),dateSerial VARCHAR(11))
    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