sql生成年月日格式的流水号

来源:百度知道 编辑:UC知道 时间:2024/05/12 03:24:42
如info表,里面有id、name、type字段,id为主键,type是001、002、。。。等类似的三位格式数据
现在我想要生成类似 年+季度+type+顺序种子编号 这样的流水号
例如我插入一个name='test1',type='001'的项,则自动生成200901001001
表示2009年第一个季度type=001的第一个项目。这时候我如果再插入一个type=001的项,那id就应该是2009001002了,而如果插入一个type=002的项,id就应该是2009002001了,有点绕。。。

现在又两个难点:一个就是这个id的生成,原理知道一点,需要取出表中的max(id),如果没有就是001第一个了,想知道有没有更好更安全的办法(因为去max的话,并发的问题不好处理)

第二个问题就是:因为id列是主键,所以插入的时候如果只插入name和type,会报错的。。。但是这个主键我又要系统生成流水号,所以不知如何处理,请各位高手指教

1、建立一个序列sequence:seq_id
2、to_char(SYSDATE,'yyyyQ')||type||seq_id.nextval

写个存储过程吧.

补充一下:数据库是mssql
茗茶堂 能不能再具体一点?主键那个问题如何解决?

请把你的数据库类型说明一下,ms sql? oracle?