置頂
關於資料庫流水號的問題
板上各位前輩好
小弟使用的資料庫是Oracle
想請教各位,如何產生以當天日期為主的流水號
而且日期每過一天,流水號的編號就從01開始編起
例如:15121301、15121302 、15121303、15121401、15121402等
其中,『15』表示是西元2015年
其流水號格式為:yymmdd+2碼的流水號
而且要避免線上多人同時Insert資料時產生重覆的編號
且該流水號的資料欄位格式是Varchar
小弟目前想到的方法是:以當天的日期加上like 和 count 去做 select
若都沒有找到則日期補上01
若有找到,則日期前加上count回傳的筆數+1
不知是否有更好的方法呢?!
up vote
0
select max(to_number(substr(field,-2,2)))+1......
up vote
2
用個table存流水號
結構(表流水號,目前流水號,時間)
資料是像這樣(1,12,'150108')
每次取號用update table
set 目前流水號=目前就水號+1
where 時間='150108'
returning 目前流水號;
流水號表的record可以一次生成一年份, 365/366筆
取號則是在insert前, 可以是另一個獨立的transaction
基本上類似樓上大大的方法..
up vote
2
因為不確定你的是什麼系統
使用者輸入什麼資料
但通常都是user一進頁面就要取seq.nextval 埋在背景
user送出資料就把這seq一起送出 insert到table
就是號碼牌的概念,這樣不會重複取號,但容易跳號
但是用oracle要不跳號也很難就是了
up vote
2
create sequence [sequence_name] start with 1
increment by 1 ;
sequence_name.nextval
會員登入
(先登入會員才能回覆留言喔!)
