社区
Oracle
帖子详情
日期+流水号 100分
肥胖的柠檬
2008-02-17 02:40:54
用sequence 的话只有自增列
我要的是
如:Q20082110001,Q20082110002....
过了一天后:Q20082120001,Q20082120002....
如何实现?
难道要每天0点运行一个JOB?重置序列?
还有没有更好的办法,大家是什么实现的?
...全文
248
13
打赏
收藏
日期+流水号 100分
用sequence 的话只有自增列 我要的是 如:Q20082110001,Q20082110002.... 过了一天后:Q20082120001,Q20082120002.... 如何实现? 难道要每天0点运行一个JOB?重置序列? 还有没有更好的办法,大家是什么实现的?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tanjun132
2008-02-20
打赏
举报
回复
同意楼上的
wshy0772
2008-02-20
打赏
举报
回复
SELECT Max(ID)ID+1 FROM dual WHERE TO_Char(SYSDATE,'YYYYMMDD')=Copy(ID,2,9)
既然你这是编码字段就不要弄成ID,再建个ID把这个字段分出来吧,可以每次插入时求一下这个值
如果要批量插入的时候就把Max(ID)ID+1换成Max(ID)ID+RowNum
Kurt2008
2008-02-20
打赏
举报
回复
如果是以前,我肯定会采用3楼的方法,用触发器,外加max()+1的方法. 不过现在看来此方案只是在开发阶段, 单用户使用时OK. 如果多用户并发时, 问题可就多了.
在ORACLE中用SEQUENCE可以保证不产生重复序号的办法, 更能适应多用户并发的要求. 楼主自己的建议也许是最简便可靠的. 这样你在应用程序中就可以直接使用静态 'Q'||TO_CHAR(SYSDATE,'RRRRMMDD')||LPAD(SEQ.NEXTVAL,5,'0')了.
fazzamilan
2008-02-20
打赏
举报
回复
Q20082110001我想,大概可以用3部分組成吧?即,Q+2008211+0001。
那就寫一個loop就可以了吧?
onefours
2008-02-19
打赏
举报
回复
select cancat(to_cahr(sydate,'yyyymmdd'), seqence.nextval) from dual;
阿三
2008-02-18
打赏
举报
回复
写一个存储过程,在需要生成流水号时,就调用它生成一个,这样还能用事务进行控制,保证数据的完整性。
HelloWorld_001
2008-02-18
打赏
举报
回复
我用过的就是3楼的做发,可以实现
肥胖的柠檬
2008-02-17
打赏
举报
回复
用触发器,也要用用序列吧
Croatia
2008-02-17
打赏
举报
回复
赫赫,用MAX的做法,就是一定要考虑并发的情况。
wffffc
2008-02-17
打赏
举报
回复
不用序列,用触发器
JiansLovePb
2008-02-17
打赏
举报
回复
我认为这样子可以实现,假设你的自增列名是id,可以通过触发器来实现
select max(id) into:自增序号变量 from 表名 where 以当天作为条件;
然后把触发器置为insert的before条件下插入变量值
Croatia
2008-02-17
打赏
举报
回复
当然,之前的都不要了的话,就同时清空之前的。删除掉。
Croatia
2008-02-17
打赏
举报
回复
我可能会建立很多很多个sequence,按照日期,每个月底,生成一次,下个月用的。
名字就用日期。
JAVA生成订单号(
日期
+
流水号
)
java按
日期
加
流水号
方式生成订单号,已经测试过,可递增方式生成。
java开发利用
日期
+xxx生成形如201312
100
01的
流水号
java开发用于给上传文件附上ID,此ID号为
日期
+xxx,生成形如201312
100
01 第二天自动从2013121
100
1开发不会重复。有问题可联系我。
14位编号=8位
日期
(+6位
流水号
)
实现:生成长度为14位的编号,其中前8位为当前
日期
(
日期
格式:YYYYMMDD),后6位为
流水号
。
存储过程实现生成
流水号
存储过程实现
流水号
,可以实现防止并发生成重复的
流水号
,.net 技术,sql server 数据库编写,可以参考学习哦
C#生成
流水号
小代码
自己写的一点小代码,多有不当,请指正! public string GetAutoDocNo() { string DocNo = "AD"; string today = DateTime.Today.Date.ToString("yyyyMMdd", DateTimeFormatInfo.InvariantInfo); DataSet DocDs = GetDataSet(" select * from News"); //初始化 if (DocDs.Tables[0].Rows.Count == 0) { DocNo += today + "101"; return DocNo; } /***********************/ else if (DocDs.Tables[0].Rows.Count > 0) { int count = 0; string oldDocNo = string.Empty; for (int i = 0; i 0/*当天已经有单*/) { DocDs = GetDataSet("select MAX(CAST(SUBSTRING(NewsID,3,12) AS BIGINT)) as NewsID from News where (SUBSTRING(NewsID,3,8))='" + today + "'"); string id = DocDs.Tables[0].Rows[0]["NewsId"].ToString(); string lastid = id.Substring(8, 3); try { decimal lastidec = decimal.Parse(lastid); lastidec += 1; return DocNo + today + (lastidec.ToString()); } catch (Exception) { throw; }
Oracle
17,140
社区成员
55,259
社区内容
发帖
与我相关
我的任务
Oracle
Oracle开发相关技术讨论
复制链接
扫一扫
分享
社区描述
Oracle开发相关技术讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章